MessageBox() "eat" 我的用户自定义消息吗?
Will MessageBox() "eat" my user-defined message?
我有一个 UI 线程和另一个线程,我想使用 PostMessage()
从另一个 trhead 向 UI 线程发送一条用户定义的消息。
如果UI线程显示一个消息框,然后我发送自定义消息,消息框的消息循环是否会从UI线程中获取自定义消息消息队列,自定义消息会丢失?!
PostMessage()
不是问题。 MessageBox()
运行它自己的消息循环来使消息框成为模态,但调用 DispatchMessage()
并且该函数确保为 [=] 的任何消息调用正确的 window 过程26=] 到任何 window.
只有在调用 PostThreadMessage()
时才会犯此错误。如果接收线程显示对话框或进入模态循环,那将永远不安全。 Raymond Chen 就此写了几篇博客文章:
Thread messages are eaten by modal loops
Why do messages posted by PostThreadMessage disappear?
一个可能的极端情况是发布一条消息,该消息需要消息循环而不是 window 过程来处理消息。比如快捷键。
我有一个 UI 线程和另一个线程,我想使用 PostMessage()
从另一个 trhead 向 UI 线程发送一条用户定义的消息。
如果UI线程显示一个消息框,然后我发送自定义消息,消息框的消息循环是否会从UI线程中获取自定义消息消息队列,自定义消息会丢失?!
PostMessage()
不是问题。 MessageBox()
运行它自己的消息循环来使消息框成为模态,但调用 DispatchMessage()
并且该函数确保为 [=] 的任何消息调用正确的 window 过程26=] 到任何 window.
只有在调用 PostThreadMessage()
时才会犯此错误。如果接收线程显示对话框或进入模态循环,那将永远不安全。 Raymond Chen 就此写了几篇博客文章:
Thread messages are eaten by modal loops
Why do messages posted by PostThreadMessage disappear?
一个可能的极端情况是发布一条消息,该消息需要消息循环而不是 window 过程来处理消息。比如快捷键。