tuk*_*kra 6 c++ windows winapi
当关闭按钮时,我正试图从控制台应用程序中正常退出.
bool done = false;
BOOL ctrl_handler(DWORD event)
{
if (event == CTRL_CLOSE_EVENT) {
done = true;
return TRUE;
}
return FALSE;
}
int main()
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE)(ctrl_handler), TRUE);
while (!done)
do_stuff();
cleanup();
cout << "bye";
}
Run Code Online (Sandbox Code Playgroud)
我的处理程序被正确调用,但主线程之后没有恢复,所以"再见"永远不会发生.如果我改为捕获CTRL_C_EVENT并在控制台中点击^ C,则允许主线程继续并正常退出.有没有办法让主线程在控制台关闭时正常退出?
我也尝试过使用std :: signal,但它是一样的.适用于^ C但不适用于窗口关闭.
谢谢乔纳森的小费.
我看到处理程序是在它自己的线程上调用的.如果处理程序返回,则整个进程被强制退出,因此我们需要给主线程时间自行退出.
bool done = false;
BOOL ctrl_handler(DWORD event)
{
if (event == CTRL_CLOSE_EVENT) {
done = true;
Sleep(20000); // force exit after 20 seconds
return TRUE;
}
return FALSE;
}
int main()
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE)(ctrl_handler), TRUE);
while (!done)
do_stuff();
cleanup();
cout << "bye";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2614 次 |
| 最近记录: |