使用C和Win32,我遇到一个问题,我的程序冻结而不是在发布退出消息时关闭(例如Alt-F4),我必须用任务管理器结束该过程。
我在主循环中有这个:(问题解决了)
MSG msg;
while(1)
{
while(PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
{
terminate = 1;
while(terminate != 3) //each thread increments "terminate" by 1 before returning
{
Sleep(1);
}
return 0;
}
DispatchMessage(&msg);
}
Sleep(1);
}
它会打印“OK!”在控制台中然后冻结。
我认为这可能是因为我有多个线程并且它们没有正确终止(但我读到如果我从main()函数返回,则其他线程应该被自动终止)。如果它有助于其中一个线程是一个OpenGL渲染线程。
答案 0 :(得分:1)
main
函数只是一个线程,你只是终止那个。但是,对于要结束的进程,所有线程都需要正确终止,否则它将永远运行。您需要保留对线程的引用,并在收到WM_QUIT
消息后终止它们。
答案 1 :(得分:0)
退出是退出整个过程。当您致电退出时,您的流程将会清理,例如调用用atexit注册的函数,或者在c ++的情况下调用全局对象的析构函数。那么abort()或terminateProcess。