DispatchMessage是多线程的吗?

时间:2017-11-15 15:57:45

标签: multithreading winapi

我正在使用一个简单的循环来处理窗口消息以呈现窗口:

while (GetMessage(&msg, NULL, 0, 0)>0)
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

我虽然在我的应用程序中只有e线程,但在OutputDebugStringWM_PAINT部分添加了一些WM_CHAR,我看到在WM_PAINT中调用WM_CHAR我在{{1}}中调用的方法的中间部分,如果没有多个线程,我看不出它是如何可能的。

所以我的问题很简单,这个循环是否使用多个线程来处理窗口消息?

由于

1 个答案:

答案 0 :(得分:1)

不,DispatchMessage不使用其他线程来执行其工作。您可以通过在日志记录输出中包含线程ID来自行检查。

您可能观察到的是一些可重入的行为。也许您调用了一个函数,该函数又称为RedrawWindow或类似函数。该函数依次调用您的窗口过程,从而导致您观察到的行为。