我有一个UI线程和另一个线程,我想使用PostMessage()
从另一个trhead向UI线程发送用户定义的消息。
如果UI线程显示消息框,然后我发送用户定义的消息,消息框的消息循环将从UI线程消息队列中检索用户定义的消息,因此用户定义的消息会丢失吗?!
答案 0 :(得分:3)
PostMessage()
不是问题。 MessageBox()
运行自己的消息循环以使消息框模态化,但调用DispatchMessage()
并且该函数确保为发布/发送到任何窗口的任何消息调用正确的窗口过程
如果你打电话给PostThreadMessage()
,你只能犯这个错误。如果接收线程显示对话框或进入模态循环,则永远不会安全。 Raymond Chen撰写了几篇博客文章:
Thread messages are eaten by modal loops
Why do messages posted by PostThreadMessage disappear?
可能的一个案例是发布一条消息,要求消息循环处理消息而不是窗口过程。就像一个快捷键击。