В консольном приложении нет цикла сообщений, в котором вас просят выйти, однако Windows дает вам возможность зарегистрировать функцию для получения некоторых уведомлений, которые вам могут понадобиться. Одним из них является уведомление об закрытии.
Прежде всего объявите функцию, которую Windows будет вызывать для этой цели, с прототипом, заданным HandlerRoutine:
BOOL WINAPI ConsoleHandlerRoutine(DWORD dwCtrlType) {
if (CTRL_CLOSE_EVENT == dwCtrlType) {
return TRUE;
}
return FALSE;
}
Теперь зарегистрируйте эту функцию, используя SetControlCtrlHandler, прежде чем вы начнете свой цикл:
int main(int argc, char* argv[])
{
if (FALSE == SetConsoleCtrlHandler(ConsoleHandlerRoutine, TRUE)) {
// Cannot register your handler? Check GetLastError()
}
while (true)
{
// This is your loop
}
return 0;
}
Это сделано. Вы можете явно удалить объекты, которые хотите удалить, или просто установить флаг, который разорвет ваш бесконечный цикл.
Обратите внимание, что вы получите больше событий (выключение Windows CTRL_SHUTDOWN_EVENT
, выход пользователя из системы CTRL_LOGOFF_EVENT
, прерывание работы пользователя CTRL_C_EVENT
, закрытие CTRL_CLOSE_EVENT
), обработайте то, что вам нужно/хотите.
person
Adriano Repetti
schedule
15.06.2015