【发布时间】:2017-11-15 15:57:44
【问题描述】:
我正在使用一个简单的循环来处理 windows 消息以呈现一个窗口:
while (GetMessage(&msg, NULL, 0, 0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
虽然我在我的应用程序中只有一个线程,但在WM_PAINT 和WM_CHAR 部分中添加了一些OutputDebugString,我看到WM_PAINT 在我调用@ 的方法中间被调用987654326@,我看不出没有几个线程怎么可能。
所以我的问题很简单,这个循环是否使用多个线程来处理窗口消息?
谢谢
【问题讨论】:
-
显示您的
WM_PAINT和WM_CHAR处理程序。回答您的问题在很大程度上取决于他们。 -
这不是问题,这个循环只调度使用 PostMessage() 传递的消息。它总是将消息放在由创建窗口的同一线程拥有的队列中。您需要为 SendMessage() 而烦恼。直接调用一个窗口的窗口过程。只有系统消息(消息号小于 0x400)会自动编组到拥有窗口的线程。真正的问题肯定是重新进入,无论你做什么调用都会给消息循环一个发送消息的机会。不要对真正的电话保密。
标签: multithreading winapi