我在使用 winapi 时遇到了问题,至少我猜是这样。当我关闭应用程序时,该进程仍然保持“幽灵”状态。窗口像往常一样消失,但进程仍然存在,这阻止了我重新编译..我必须从任务管理器手动终止它。
我不知道代码的哪一部分是错误的,而且它有点长,所以这里有一个完整代码的链接:http://pastebin.com/TmRiCeR4
但我的猜测是,它可能与此循环有关:</p>
while(1) {
if(PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT) {
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
} else
draw();
Sleep(100); //crappy way of stopping 10000000000000 loops a second
}
我猜它没有正确地“转义”循环,所以它永远不会在它之后立即到达 closewindow() 函数,但我可能是错的。我部分复制了教程中的代码,尽管我确实更改了它,所以我从教程代码中看不出问题所在。这是我正在谈论的教程(也许已经过时了?):http://bobobobo.wordpress.com/2008/02/11/opengl-in-a-proper-windows-app-no-glut/
Google 也没有给我答案。有什么想法吗?
最佳答案
您还没有显示实际发布退出消息的代码,但如果它是一个简单的 PostQuitMessage(0);
那么您的问题出在您的 PeekMessage()
调用:
if(PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
通过提供窗口过滤器 (hwnd
),您可以防止 PeekMessage()
检索任何已发布的线程消息(即,消息不是发送到窗口,而是发送到线程)。由于 PostQuitMessage()
发布一条线程消息,因此您的循环将永远不会检索它,因此永远不会退出。
您应该更改您的调用,为第二个参数传递 NULL
。
关于c - 窗口关闭后进程保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19344198/