Проблема с SetConsoleCtrlHandler

Я пишу консольное приложение на C ++.

Я использую SetConsoleCtrlHandler для закрытия ловушки и кнопку CTRL + C. Это позволяет всем моим потокам останавливаться и завершаться должным образом.

Один из потоков выполняет некоторое сохранение, для завершения которого требуется некоторое время, и у меня есть некоторый код для ожидания в подпрограмме обработчика crtl консоли. MSDN указывает, что через 5 секунд должно появиться окно для CTRL_CLOSE_EVENT, но вместо этого мой процесс завершается.

Это раздражает и для отладки консольного приложения, так как процесс завершается до того, как вы сможете пройти через него, и я не знаю, что может быть проблема (у меня 64-битная Windows 7).

Кроме того, как ни странно, если моя процедура возвращает ИСТИНА (чтобы просто отключить действие закрытия), он все равно закрывает приложение. Процедура вызывается, поэтому 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;
}

Есть идеи?

19
задан jww 20 September 2014 в 07:38
поделиться