SendMessage vs PostMessage + WaitForSingleObject

时间:2011-07-21 16:22:21

标签: c++ winapi sendmessage postmessage waitforsingleobject

我想知道调用SendMessage(哪些块)和调用PostMessage以及WaitForSingleObject之间的区别。 想法?

4 个答案:

答案 0 :(得分:18)

如果从COM调用的上下文中调用它,则可以拒绝

SendMessage(),其中COM对象位于STA中(通过消息泵调用调用)。 PostMessage()不限于遵守COM公寓规则。

此外,PostMessage()将消息放在窗口消息队列的末尾。 SendMessage()绕过队列。您可以在Raymond Chen的博客The Old New Thing上找到关于消息队列的更长时间的讨论。

我的观点是,SendMessage()PostMessage()之间的差异远远超过了眼睛。我真的建议浏览雷蒙德的博客,因为他已经涵盖了多年来的许多问题。

答案 1 :(得分:4)

PostMessageWaitForSingleObject允许您进行异步消息传递。您可以发送消息,执行其他操作,稍后再回来查看回复。 SendMessage是同步的,需要您等待。

答案 2 :(得分:3)

我一直认为SendMessage直接调用你的windows程序,跳过消息队列;而PostMessage只是将消息添加到队列中。

答案 3 :(得分:2)

SendMessage是一个单独的API调用,因此不容易出错。使用内置而不是自己滚动。