我正在用C++编写一个控制台应用程序.
我使用SetConsoleCtrlHandler来捕获close和CTRL + C按钮.这允许我的所有线程停止并正确退出.
其中一个线程执行一些保存,需要一些时间来完成,我有一些代码在控制台crtl句柄例程中等待.MSDN指定CTRL_CLOSE_EVENT在5秒后弹出一个框,但我的进程退出.
这对于调试控制台应用程序也很烦人,因为在您可以单步执行之前进程退出并且我不知道可能是什么问题(我有Windows 7 64位).
另外,奇怪的是如果我的例程返回TRUE(只是禁用关闭操作),它仍然会关闭应用程序.该例程会被调用,因此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;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?