应用程序GetMessage甚至在MessageBox期间吗?

时间:2015-05-06 01:32:13

标签: windows messagebox reentrancy getmessage

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

我是对的吗?

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

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

另外两个相关问题是 1)在窗口过程返回之前, DispatchMessage 是否返回? 2)如果当前 DispatchMessage 尚未返回,是否会再次调用 GetMessage

1 个答案:

答案 0 :(得分:3)

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