Здравствуйте, mityaj.it.0, Вы писали:
MI0>Привет всем, есть такой код:
MI0>MI0>BOOL ConsoleHandler( DWORD fdwCtrlType )
MI0>{
MI0> switch (fdwCtrlType) {
MI0> case CTRL_C_EVENT: {
MI0> std::cout << "Exit." << "\n";
MI0> exit(1);
MI0> }
MI0> }
MI0>}
MI0>int _tmain(int argc, _TCHAR* argv[])
MI0> if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE)ConsoleHandler,TRUE)==FALSE) {
MI0> // unable to install handler...
MI0> return -1;
MI0> }
MI0> try {
MI0> // Enable exceptions in cin.
MI0> std::cin.exceptions(std::ios::badbit|std::ios::failbit);
MI0> int itSum = 0;
MI0> std::cin >> itSum;
MI0> catch (...) {
MI0> std::cout << "Error!" << "\n";
MI0> }
MI0>}
MI0>
MI0>Необходимо при ожидании ввода числа иметь возможность завершить программу по нажатию [Ctrl+C]. Данный код
MI0>это предоставляет, но с одним "НО": обработчик ConsoleHandler вызывается в другом потоке и основной поток также продолжает выполнение.
MI0>В итоге выполняется обработчик исключения и обработчик [Ctrl+C]. Это некорректно. Каким образом затормозить основной поток или
MI0>дать ему понять, что нажата [Ctrl+C]?
Используйте средства синхронизации, можно посмотреть здесь —
http://msdn.microsoft.com/ru-ru/library/172d2hhw.aspx