0

在处理 WM_TIMER 时,我调用了 MessageBox。结果,一个消息框弹出了计时器的频率。所以我相信即使在MessageBox期间,应用程序也试图继续处理排队/非排队的消息。

我对吗?

我知道根据 MSDN,当应用程序将消息发送到与发送线程不同的线程时,发送线程将尝试在SendMessage返回之前处理它收到的非排队消息——即在目标线程回复之前。

除了MessageBoxSendMessage之外,还有其他函数可以尝试在返回之前继续处理排队/非排队的消息吗?我需要知道这一点以确定在 Window 过程中调用的任何函数是否应该是可重入的。

另外两个相关问题是 1) DispatchMessage在窗口过程返回之前不会返回吗?2)如果当前的DispatchMessage还没有返回, GetMessage会不会被再次调用?

4

1 回答 1

3

模态对话框使用调用线程的消息队列在内部运行自己的消息循环。您在处理程序MessageBox()内部调用WM_TIMER,因此内部的消息循环在消息框运行时MessageBox()接收和发送后续消息。WM_TIMER

于 2015-05-06T05:09:27.760 回答