Russian Qt Forum
Ноябрь 26, 2024, 00:32
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Отследить закрытие консольного приложения
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Отследить закрытие консольного приложения (Прочитано 8918 раз)
akaMDA
Гость
Отследить закрытие консольного приложения
«
:
Март 15, 2013, 10:41 »
Необходимо отследить закрытие консольного приложения. Делаю в конструкторе класса
Код:
this->connect(qApp, SIGNAL(aboutToQuit()), SLOT(stop()));
Однако слот stop() не вызывается. В чем проблема?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Отследить закрытие консольного приложения
«
Ответ #1 :
Март 15, 2013, 10:46 »
Event-loop через QCoreApplication::exec() запущен?
PS. тема к выбранному форуму никак не относится.
Записан
Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
Re: Отследить закрытие консольного приложения
«
Ответ #2 :
Март 15, 2013, 10:50 »
Приложение как закрывается? Ctrl+C ?
Записан
akaMDA
Гость
Re: Отследить закрытие консольного приложения
«
Ответ #3 :
Март 15, 2013, 10:54 »
Windows 7. Поэтому закрываю окошко появившейся консоли.
QCoreApplication::exec() запущен естественно, другие сигналы-слоты выполняются. Так же не вызывается деструктор класса, в котором и есть вся функцианальность приложения
Записан
mutineer
Гость
Re: Отследить закрытие консольного приложения
«
Ответ #4 :
Март 15, 2013, 11:08 »
Видимо потому, что закрытие окна консоли вызывает просто terminate процесса, который отследить средствами Qt не получится
Записан
akaMDA
Гость
Re: Отследить закрытие консольного приложения
«
Ответ #5 :
Март 15, 2013, 11:10 »
Да. походу дела так.
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Отследить закрытие консольного приложения
«
Ответ #6 :
Март 15, 2013, 12:58 »
Дабы не плодить темы - как решается обратная проблема: как при аварийном завершении главной программы автоматически закрыть все порождённые ею приложения?
Как это делают, например, браузеры в отношении своих плагинов? Если зависший браузер убить через диспетчер задач, то автоматически убиваются и порождённые им обертки над плагинами. Как это сделано? Может плагиновая обёртка регулярно проверяет наличие основного приложения и самоуничтожается при его отсутствии или же есть особые флаги в CreateProcess?
Записан
Bepec
Гость
Re: Отследить закрытие консольного приложения
«
Ответ #7 :
Март 15, 2013, 13:24 »
Кхм. Как бы особо не специалист, но консольное тоже сигнал о завершении получает. И может произвести доп действия. Не я правда консолью занимаюсь, но имеется утилита, которая при закрытии через крестик сначала сохраняется, пишет в базу и только после этого умирает.
Записан
mutineer
Гость
Re: Отследить закрытие консольного приложения
«
Ответ #8 :
Март 15, 2013, 13:33 »
Цитата: Bepec от Март 15, 2013, 13:24
Кхм. Как бы особо не специалист, но консольное тоже сигнал о завершении получает. И может произвести доп действия. Не я правда консолью занимаюсь, но имеется утилита, которая при закрытии через крестик сначала сохраняется, пишет в базу и только после этого умирает.
Конечно можно отреагировать на факт убиения своего процесса. Вот только не через Qt, вроде бы
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Отследить закрытие консольного приложения
«
Ответ #9 :
Март 15, 2013, 13:42 »
Во С (С++) переопределить продеуру atexit ...
Записан
alex312
Хакер
Offline
Сообщений: 606
Re: Отследить закрытие консольного приложения
«
Ответ #10 :
Март 15, 2013, 14:37 »
Цитата: akaMDA от Март 15, 2013, 10:41
Необходимо отследить закрытие консольного приложения. ...
SetConsoleCtrlHandler
- и ни в чем себе не отказывайте.
пример -
http://qt.gitorious.org/qt-labs/qbs/blobs/master/src/app/qbs/ctrlchandler.cpp
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...