Russian Qt Forum
Ноябрь 26, 2024, 02:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отследить закрытие консольного приложения  (Прочитано 8929 раз)
akaMDA
Гость
« : Март 15, 2013, 10:41 »

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

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Март 15, 2013, 10:46 »

Event-loop через QCoreApplication::exec() запущен?

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

Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
« Ответ #2 : Март 15, 2013, 10:50 »

Приложение как закрывается? Ctrl+C ?
Записан
akaMDA
Гость
« Ответ #3 : Март 15, 2013, 10:54 »

Windows 7. Поэтому закрываю окошко появившейся консоли.
QCoreApplication::exec() запущен естественно, другие сигналы-слоты выполняются. Так же не вызывается деструктор класса, в котором и есть вся функцианальность приложения
Записан
mutineer
Гость
« Ответ #4 : Март 15, 2013, 11:08 »

Видимо потому, что закрытие окна консоли вызывает просто terminate процесса, который отследить средствами Qt не получится
Записан
akaMDA
Гость
« Ответ #5 : Март 15, 2013, 11:10 »

Да. походу дела так.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #6 : Март 15, 2013, 12:58 »

Дабы не плодить темы - как решается обратная проблема: как при аварийном завершении главной программы автоматически закрыть все порождённые ею приложения?
Как это делают, например, браузеры в отношении своих плагинов? Если зависший браузер убить через диспетчер задач, то автоматически убиваются и порождённые им обертки над плагинами. Как это сделано? Может плагиновая обёртка регулярно проверяет наличие основного приложения и самоуничтожается при его отсутствии или же есть особые флаги в CreateProcess?
Записан
Bepec
Гость
« Ответ #7 : Март 15, 2013, 13:24 »

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

Кхм. Как бы особо не специалист, но консольное тоже сигнал о завершении получает. И может произвести доп действия. Не я правда консолью занимаюсь, но имеется утилита, которая при закрытии через крестик сначала сохраняется, пишет в базу и только после этого умирает.

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

Сообщений: 1025


Просмотр профиля
« Ответ #9 : Март 15, 2013, 13:42 »

Во С (С++) переопределить продеуру atexit ...
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #10 : Март 15, 2013, 14:37 »

Необходимо отследить закрытие консольного приложения. ...
SetConsoleCtrlHandler - и ни в чем себе не отказывайте.

пример - http://qt.gitorious.org/qt-labs/qbs/blobs/master/src/app/qbs/ctrlchandler.cpp
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 23.