Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: akaMDA от Март 15, 2013, 10:41



Название: Отследить закрытие консольного приложения
Отправлено: akaMDA от Март 15, 2013, 10:41
Необходимо отследить закрытие консольного приложения. Делаю в конструкторе класса
Код:
this->connect(qApp, SIGNAL(aboutToQuit()), SLOT(stop()));
Однако слот stop() не вызывается.  В чем проблема?


Название: Re: Отследить закрытие консольного приложения
Отправлено: GreatSnake от Март 15, 2013, 10:46
Event-loop через QCoreApplication::exec() запущен?

PS. тема к выбранному форуму никак не относится.


Название: Re: Отследить закрытие консольного приложения
Отправлено: mutineer от Март 15, 2013, 10:50
Приложение как закрывается? Ctrl+C ?


Название: Re: Отследить закрытие консольного приложения
Отправлено: akaMDA от Март 15, 2013, 10:54
Windows 7. Поэтому закрываю окошко появившейся консоли.
QCoreApplication::exec() запущен естественно, другие сигналы-слоты выполняются. Так же не вызывается деструктор класса, в котором и есть вся функцианальность приложения


Название: Re: Отследить закрытие консольного приложения
Отправлено: mutineer от Март 15, 2013, 11:08
Видимо потому, что закрытие окна консоли вызывает просто terminate процесса, который отследить средствами Qt не получится


Название: Re: Отследить закрытие консольного приложения
Отправлено: akaMDA от Март 15, 2013, 11:10
Да. походу дела так.


Название: Re: Отследить закрытие консольного приложения
Отправлено: xokc от Март 15, 2013, 12:58
Дабы не плодить темы - как решается обратная проблема: как при аварийном завершении главной программы автоматически закрыть все порождённые ею приложения?
Как это делают, например, браузеры в отношении своих плагинов? Если зависший браузер убить через диспетчер задач, то автоматически убиваются и порождённые им обертки над плагинами. Как это сделано? Может плагиновая обёртка регулярно проверяет наличие основного приложения и самоуничтожается при его отсутствии или же есть особые флаги в CreateProcess?


Название: Re: Отследить закрытие консольного приложения
Отправлено: Bepec от Март 15, 2013, 13:24
Кхм. Как бы особо не специалист, но консольное тоже сигнал о завершении получает. И может произвести доп действия. Не я правда консолью занимаюсь, но имеется утилита, которая при закрытии через крестик сначала сохраняется, пишет в базу и только после этого умирает.


Название: Re: Отследить закрытие консольного приложения
Отправлено: mutineer от Март 15, 2013, 13:33
Кхм. Как бы особо не специалист, но консольное тоже сигнал о завершении получает. И может произвести доп действия. Не я правда консолью занимаюсь, но имеется утилита, которая при закрытии через крестик сначала сохраняется, пишет в базу и только после этого умирает.

Конечно можно отреагировать на факт убиения своего процесса. Вот только не через Qt, вроде бы


Название: Re: Отследить закрытие консольного приложения
Отправлено: Fregloin от Март 15, 2013, 13:42
Во С (С++) переопределить продеуру atexit ...


Название: Re: Отследить закрытие консольного приложения
Отправлено: alex312 от Март 15, 2013, 14:37
Необходимо отследить закрытие консольного приложения. ...
SetConsoleCtrlHandler (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686016%28v=vs.85%29.aspx) - и ни в чем себе не отказывайте.

пример - http://qt.gitorious.org/qt-labs/qbs/blobs/master/src/app/qbs/ctrlchandler.cpp