我正在使用一个简单的循环来处理窗口消息以呈现窗口:
while (GetMessage(&msg, NULL, 0, 0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
我虽然在我的应用程序中只有e线程,但在OutputDebugString
和WM_PAINT
部分添加了一些WM_CHAR
,我看到在WM_PAINT
中调用WM_CHAR
我在{{1}}中调用的方法的中间部分,如果没有多个线程,我看不出它是如何可能的。
所以我的问题很简单,这个循环是否使用多个线程来处理窗口消息?
由于
答案 0 :(得分:1)
不,DispatchMessage
不使用其他线程来执行其工作。您可以通过在日志记录输出中包含线程ID来自行检查。
您可能观察到的是一些可重入的行为。也许您调用了一个函数,该函数又称为RedrawWindow
或类似函数。该函数依次调用您的窗口过程,从而导致您观察到的行为。