MessageBox()" eat"我的用户定义的消息?

时间:2015-05-12 09:54:27

标签: c winapi

我有一个UI线程和另一个线程,我想使用PostMessage()从另一个trhead向UI线程发送用户定义的消息。

如果UI线程显示消息框,然后我发送用户定义的消息,消息框的消息循环将从UI线程消息队列中检索用户定义的消息,因此用户定义的消息会丢失吗?!

1 个答案:

答案 0 :(得分:3)

PostMessage()不是问题。 MessageBox()运行自己的消息循环以使消息框模态化,但调用DispatchMessage()并且该函数确保为发布/发送到任何窗口的任何消息调用正确的窗口过程

如果你打电话给PostThreadMessage(),你只能犯这个错误。如果接收线程显示对话框或进入模态循环,则永远不会安全。 Raymond Chen撰写了几篇博客文章:

Thread messages are eaten by modal loops

Why do messages posted by PostThreadMessage disappear?

可能的一个案例是发布一条消息,要求消息循环处理消息而不是窗口过程。就像一个快捷键击。