小编Mar*_*che的帖子

为什么 win32 消息循环在线程化时停止工作?

我正在尝试创建一个 WIN32 (C++) 程序,在该程序中我必须同时处理消息并运行 while 循环。为了做到这一点,我想使用线程。

当我将消息循环移动到一个单独的过程(从函数 WinMain 调用)时,所有事情都工作正常。但是,当我使用下面的代码来线程化该过程时,而不是简单地从主进程中调用它,窗口变得无响应。

你知道为什么会这样吗?

在 WinMain 内部,创建主窗口后,我删除了消息循环和返回值,添加了以下代码:

std::thread t1(message_loop);
t1.join();
return return_val;
Run Code Online (Sandbox Code Playgroud)

return_val是一个全局变量,我将用它来接收消息循环结束时 WinMain 应返回的值。

另外,函数message_loop如下:

void message_loop()
{
    MSG messages;
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
    return_val = messages.wParam;
}
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi multithreading message-loop

3
推荐指数
1
解决办法
1514
查看次数

标签 统计

c++ ×1

message-loop ×1

multithreading ×1

winapi ×1

windows ×1