SetConsoleCtrlHandler и многопоточность
От: mityaj.it.0  
Дата: 18.09.09 09:19
Оценка:
Привет всем, есть такой код:
BOOL ConsoleHandler( DWORD fdwCtrlType )
{
    switch (fdwCtrlType) {
        case CTRL_C_EVENT: {
            std::cout << "Exit." << "\n";
                        exit(1);
        }

    }
}
int _tmain(int argc, _TCHAR* argv[])
    if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE)ConsoleHandler,TRUE)==FALSE) {
        // unable to install handler... 
        return -1;
    }
    try {
        // Enable exceptions in cin.
        std::cin.exceptions(std::ios::badbit|std::ios::failbit);
        int itSum = 0;
        std::cin >> itSum;
    catch (...) {
        std::cout << "Error!" << "\n";
    }
}

Необходимо при ожидании ввода числа иметь возможность завершить программу по нажатию [Ctrl+C]. Данный код
это предоставляет, но с одним "НО": обработчик ConsoleHandler вызывается в другом потоке и основной поток также продолжает выполнение.
В итоге выполняется обработчик исключения и обработчик [Ctrl+C]. Это некорректно. Каким образом затормозить основной поток или
дать ему понять, что нажата [Ctrl+C]?


23.09.09 20:26: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.