Название: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 25, 2010, 13:09 Добрый день! У меня такая проблема. Я написал приложение с использованием QTService.
Как показано в примере, в методе Start() я создаю объект, наследованый от QObject: Код: obj= new MyObject(); В методе Stop() я унечтожаю объект: Код: delete obj Впрочем, все это, как и в примере (только в примере вместо MyObject - QLabel) работает нормально. Но! Когда я в мой клас MyObject добавляю динамическую переменную типа QObject, и в конструкторе класса MyObject создаю ее, а в деструкторе уничтожаю тоесть: Код: MyObject::MyObject() , то при попытке остановить сервис выдается ошибка: "Error 109: The pipe has been ended". Если деструктор оставить пустой: Код: MyObject::~MyObject() то все работает нормально. Если делать так: Код: MyObject::~MyObject() то вместо этой выдает ошибку "Error 1067 Process Terminated unexpectedly" Если это все запускать не как сервис, а как обычное приложение то никаких ошибок, не выдает. Что делать?... Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: BRE от Ноябрь 25, 2010, 14:00 А что делается в run( int argc, char ** argv )?
Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 25, 2010, 15:25 В каком run? типа в main?
Вот main.cpp, который запускает сервис: Код: #include "MyService.h" Вот процедура start: Код: void MyService::start() Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: BRE от Ноябрь 25, 2010, 15:30 Мы про один и тот-же QtService говорим?
http://doc.trolltech.com/solutions/qtservice/qtservice.html Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 25, 2010, 16:45 Да, но вообщето о новой версии:
http://doc.qt.nokia.com/solutions/4/qtservice/qtservice.html Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: ритт от Ноябрь 25, 2010, 20:29 судя по ошибке, обращение к невалидному указателю.
Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 25, 2010, 22:21 У меня конструктор сервиса выглядит следующим образом:
Код: MyService::MyService(int argc, char **argv, QString pServiceName, QString pServiceDescription) Я изменил его следующим обраом: Код: MyService::MyService(int argc, char **argv, QString pServiceName, QString pServiceDescription) Ошибки пропали. Но в режиме отладки, когда я отлаживаю процедуру stop(); в окне дебагера получаю текст: "QCoreApplication::postEvent: Unexpected null receiver" Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: BRE от Ноябрь 25, 2010, 22:30 Ты бы побольше кода выкладывал, а то как-то в голове это все совмещать лениво. :)
Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 25, 2010, 22:53 Да там кода.....
Я программу 3 месяца писал. + комерция, не хочется как-то выкладывать все ::) Спасибо на том. Главное уже без ошибок работает. .... пока ;D Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: ритт от Ноябрь 26, 2010, 00:09 угу, "QCoreApplication::postEvent: Unexpected null receiver" - это "без ошибок работает"...
Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 26, 2010, 01:52 согласен, но что это значит?
Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: ритт от Ноябрь 26, 2010, 02:34 это значит, что ваша проблема с использованием невалидного указателя всё ещё актуальна - просто приняла иную форму...
Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: ритт от Ноябрь 26, 2010, 02:37 Да там кода..... нам всё и не надо (и я склонен полагать, что нам ни строчки вашего кода не надо - это вам надо показать код чтобы другие указали на ошибку...или тред не об этом?), подозреваю, что будет достаточно посмотреть на декларацию и реализацию MyService - как оно есть сейчас...Я программу 3 месяца писал. + комерция, не хочется как-то выкладывать все ::) Спасибо на том. Главное уже без ошибок работает. .... пока ;D Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 26, 2010, 11:31 Вот, собственно, исходники сервиса ::):
.H Код: #ifndef MySERVICE_H .CPP Код: #include "MyService.h" Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: BRE от Ноябрь 26, 2010, 12:16 Добавь в методы start, stop, pause, resume, processComand отладочный вывод.
Код
И посмотри, какие методы и в какой последовательности будут вызываться. Как мне кажется, после отработки stop, кто-то где-то еще пытается добраться до разрушенного объекта. Название: Re: Ошибка 109 при остановке сервиса под Windows (QtService) Отправлено: vbi от Ноябрь 26, 2010, 13:53 Нет, после stop() больше ни одна процедура не запускается.
Возможно это здесь: Код: void MyService::stop() srgLogServer - обявлен поза классом. И dMain широко его использует (отправляет и принимает сигналы). Возможно после удаления dMain, он еще пытается какой-то лог на него отправить. |