c - 窗口关闭后进程保持打开状态

标签 c winapi opengl

我在使用 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/

相关文章:

c - 如何加载IDT?

c - 如何修复此代码,以便它可以测试字符旁边存在的整数?

c - 分配相同类型的值不起作用(需要左值作为一元 '&' 操作数)

c++ - 共享内存: MapViewOfFile returns error 5

c - 在 WIN32 中的 "BUTTON"类窗口上显示位图

c - 为我的 C ATM 设置余额

c - Win32 WriteFile 返回 0 字节作为写入的字节数。 lpBuffer 包含 4455 字节

c++ - 平面的参数化生成

java - JOGL中如何接受用户键盘输入?

c++ - 在 OpenGl 中渲染 mandelbrot 集