Название: [Решено] самозавершение приложения Отправлено: hanabad от Ноября 19, 2010, 23:31 Доброго времени суток всем!
Вобщем проблемма такая: После отработки кода (рекконект модема) прога должна сама завершать свою работу, однако этого не происходит (висит в процессах) вот код: Код Помогите, пожалуйста. Название: Re: самозавершение приложения Отправлено: SimpleSunny от Ноября 20, 2010, 00:45 Добавьте разметку к коду. [ code=cpp] [ /code]
Название: Re: самозавершение приложения Отправлено: Пантер от Ноября 20, 2010, 09:59 Код Замени на Код
Название: Re: самозавершение приложения Отправлено: DmP от Ноября 20, 2010, 10:28 Код Замени на Код
Название: Re: самозавершение приложения Отправлено: hanabad от Ноября 20, 2010, 12:19 Да действительно если последние две строчки заменить на return 0;
модем перестает перезагружаться. (Наверно надо было создавать тему в "Работа с сетью") Название: Re: самозавершение приложения Отправлено: BRE от Ноября 20, 2010, 12:22 Ну так:
нужно перехватывать сигнал об удачной отправке и там quit() Точнее о сигнал завершении.Название: Re: самозавершение приложения Отправлено: DmP от Ноября 20, 2010, 12:30 Ну так: Да, да, верно. Там вообще все можно исправить одной строчкой. :)нужно перехватывать сигнал об удачной отправке и там quit() Точнее о сигнал завершении.Название: Re: самозавершение приложения Отправлено: Denjs от Ноября 20, 2010, 12:54 qApp->quit();
(по моей памяти и моим представлениям, возможно ошибочным) qApp->quit() не работает вне запущенного цикла событий ("eventloop"). Или (что в принципе аналогично) не работает для "не-запущенного qApp". (надеюсь вам понятно что ваша a и qApp - это одно и то же?) Более того - вы в конце вашего майна, фактически его(цикл событий и прилжение) и запускаете: return a.exec(); нестыковка понятна? Цитировать Нельзя, там же надо сначала отправить запрос, а он без exec() не уйдет. Наверное нужно перехватывать сигнал об удачной отправке и там quit() какой вывод? меняйте архитектуру приложения. Выносите вашу полезную функциональность в отдельный класс, его объект создавайте в майне, подключайте к нему сигналы об окончании обработки и в них уже делайте "qApp->quit();". А что бы класс начал гарантировано обрабатывать сразу после запуска цикла событий - создайте класс initSender с единственным сигналом, который подключите к слоту вашего "бизнес-класса" содержащему нужную функциональность, и подключите его через "квотед-коннекшн". В initSender создайте процедуру которая испускает сигнал, и вызовите её в майне перед "return a.exec();". т.к. это квотедконнекшн - сигнал будет доставлен только после запуска цикла событий - а именно - практически сразу после (внутри) a.exec(). Название: Re: самозавершение приложения Отправлено: hanabad от Ноября 20, 2010, 13:00 Блин и вправду исправил все одной строкой:
предпоследнюю строку (qApp->quit()) я заменил на QObject::connect(&manager,SIGNAL(finished (QNetworkReply*)),qApp,SLOT(quit())); и никаких проблем! Всем спасибо! Название: Re: самозавершение приложения Отправлено: whirlwind от Ноября 20, 2010, 23:46 qApp->quit(); quit() не завершает программу, он просто прерывает evenloop. (по моей памяти и моим представлениям, возможно ошибочным) qApp->quit() не работает вне запущенного цикла событий ("eventloop"). Или (что в принципе аналогично) не работает для "не-запущенного qApp". (надеюсь вам понятно что ваша a и qApp - это одно и то же?) А если eventloop не запущен, но и прерывать нечего :) |