【发布时间】:2011-04-08 03:00:36
【问题描述】:
我正在用 C++ 编写一个控制台应用程序。
我使用 SetConsoleCtrlHandler 来捕获关闭和 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;
}
有什么想法吗?
【问题讨论】:
标签: c++ windows console-application