gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:48:49 25 4
gpt4 key购买 nike

好的,我有了我的主窗口过程(简化):

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 发布到消息队列,这也会破坏子窗口,对吧?有什么帮助吗?谢谢

最佳答案

根据 MSDN WM_CREATECreateWindow 期间发送。所以你在创建过程中就破坏了窗口。我不确定这是否可行。还有,为什么这么复杂?文档说

If an application processes this message, it should return zero to continue creation of the window. If the application returns –1, the window is destroyed and the CreateWindowEx or CreateWindow function returns a NULL handle.

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

关于winapi - C++ Win32 PostQuitMessage(0) 不工作? CPU @ 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16291807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com