Я пишу консольное приложение на C ++.
Я использую SetConsoleCtrlHandler для прерывания закрытия и нажатия клавиш CTRL + C.Это позволяет всем моим потокам правильно останавливаться и выходить.
Один из потоков выполняет некоторое сохранение, которое требует некоторого времени для завершения, и у меня есть некоторый код для ожидания в подпрограмме обработки crtl консоли.MSDN указывает, что через 5 секунд должно появиться окно для CTRL_CLOSE_EVENT, но вместо этого мой процесс завершается.
Это также раздражает при отладке консольного приложения, так как процесс завершается до того, как вы сможете перейти, и я не знаю, чтоможет быть проблема (у меня Windows 7 64bit).
Также, как ни странно, если моя процедура возвращает TRUE (просто отключить действие close), она все равно закрывает приложение.Процедура вызывается, поэтому SetConsoleCtrlHandler был успешно установлен.
Например:
BOOL WINAPI ConsoleHandlerRoutine(DWORD dwCtrlType)
{
if (dwCtrlType == CTRL_CLOSE_EVENT)
{
return TRUE;
}
return FALSE;
}
int _tmain(int argc, _TCHAR* argv[])
{
BOOL ret = SetConsoleCtrlHandler(ConsoleHandlerRoutine, TRUE);
while (true)
{
Sleep(1000);
}
return 0;
}
Есть идеи?