我正在尝试创建一个 WIN32 (C++) 程序,在该程序中我必须同时处理消息并运行一个 while 循环。为了做到这一点,我想使用线程。
当我将消息循环移动到一个单独的过程(从函数 WinMain 调用)时,一切正常。但是,当我使用下面的代码线程化该过程时,而不是简单地从主进程调用它,窗口变得无响应。
你知道为什么会这样吗?
在 WinMain 中,创建主窗口后,我删除了消息循环和返回值,添加了以下代码:
std::thread t1(message_loop);
t1.join();
return return_val;
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;
}