C ++ Win32 PostQuitMessage(0)不工作? CPU @ 100%

时间:2013-04-30 03:43:19

标签: winapi

好的,所以我有我的主窗口程序(简化):

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CREATE:
        {
            if(!loadFiles())
                SendMessage(hwnd, WM_CLOSE, 0, 0);
        }
        break;

        case WM_CLOSE:
            DestroyWindow(hwnd);
            return 0;
        break;

        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        break;

        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

loadFiles()是一个读取某些文本文件的函数。如果文件丢失,则会发布错误消息,然后返回false。我通过发送WM_CLOSE消息来处理这个问题,该消息发送WM_DESTROY?该程序调用PostQuitMessage(0)和..没有。该过程仍处于后台,现在在核心1上使用100%CPU。这是我的消息循环:

MSG Msg;
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
}
return Msg.wParam;

非常简单,我环顾四周,看到人们使用各种不同的循环,大多数使用PeekMessage()函数..值得注意的是我有几个包含不同控件的子窗口,当用户选择时我会显示并隐藏它们不同的选项卡,但我不认为这很重要,因为PostQuitMessage(0)应该将WM_QUIT发布到消息队列,这会破坏子窗口以及对吗?有帮助吗?感谢

1 个答案:

答案 0 :(得分:3)

根据MSDN WM_CREATECreateWindow期间发送。所以你在创作过程中正在摧毁窗户。我不确定这应该有效。还有,为什么这么复杂?文档说

  

如果应用程序处理此消息,则应返回零   继续创建窗口。 如果应用程序返回-1,则为   窗口被销毁,CreateWindowEx或CreateWindow函数   返回一个NULL句柄。

因此,如果loadFiles()失败,则返回-1,并相应地处理CreateWindow NULL