即使在MessageBox期间应用程序GetMessage?

在处理WM_TIMER时,我调用了MessageBox 。 结果,一个消息框随着定时器的频率popup。 所以我相信应用程序试图在MessageBox中继续处理排队/不排队的消息。

我对吗?

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

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

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

Solutions Collecting From Web of "即使在MessageBox期间应用程序GetMessage?"

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