![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Каким образом лучше организовать перехват события закрытия консольного окна пользователем (клик по крестику).
|
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
|
|||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Срабатывает при нормальном завершении приложения (окончании функции main),
если же закрывать мышкой по крестику - не входит в atexit_handler. Сама консоль создаётся в оконном приложении (VS2005 C++) сразу после запуска. Попробовал создать глобальный объект, с бряком в деструкторе. При нормальном завершении программы деструктор отрабатывает как положено, при закрытии по крестику нет. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Дело в том, что специально я не обрабатываю никак закрытие консольного окна по клику на крестик. Программа просто terminate-тится. По Alt-F4 ничего не происходит. Вот и думаю, где же вставить обработчик, для события, когда юзер закроет окошко мышью (сбрасываю некоторые данные на диск перед завершением проги). |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Ну тогда скажем так: как отучить Windows терминэйтить программы без предупреждения по нажатию крестика. ( при этом консоль не зависла, никаких предупреждений о принудительном закрытии процесса винда не показывает) |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
проверьте этот код
У меня работает. Это сообщение отредактировал(а) azesmcar - 30.5.2009, 17:47 |
|||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Ну...работает..вы проверили этот код? вот что говорит MSDN по этой функции.
Это сообщение отредактировал(а) azesmcar - 30.5.2009, 19:10 |
|||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
c Runtime Library Multi-threaded Debug atexit не срабатывает. (с Runtime Library Multi-threaded Debug DLL) работает нормально. Visual Studio 2005.
|
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Не нашел отличий. Добавлено через 1 минуту и 40 секунд У меня так и стоит (VS2008) и работает. Вот опции проекта.
Добавлено через 2 минуты и 5 секунд Скиньте проект куда нибудь, гляну. |
||||
|
|||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Странно. В моем случае стоит переключить на Runtime Library Multi-threaded Debug как перестаёт работать.
Попробую собрать проект на другой системе.. Это сообщение отредактировал(а) semibug - 30.5.2009, 19:35 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
semibug
Проверил, действительно не работает. Создал новый проект Win32 с дефолт настройками, проверил - работает. Я не знаю что вы там в настройках проекта изменили. Надо проверить, но по дефолту стоит Runtime Library Multi-threaded Debug DLL и работает..проверьте, я посмотрю разницу в настройках. Интересно в чем дело. |
|||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
azesmcar,
Так же создал новый проект, из настроек поменял только Runtime Library (стояло DLL, поставил без ). После чего перестал срабатывать atexit (до изменения работал). Под перестал работать имею ввиду что не срабатывает, когда окно закрываем щелчком по крестику. Это сообщение отредактировал(а) semibug - 30.5.2009, 20:25 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |