11

我想知道调用 SendMessage(哪个块)和调用 PostMessage 与 WaitForSingleObject 有什么区别。想法?

4

4 回答 4

19

SendMessage()如果您从 COM 调用的上下文中调用它,则可能会被拒绝,其中 COM 对象位于 STA 中(通过消息泵调度调用)。PostMessage()不限于遵守 COM 公寓规则。

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

SendMessage()我的观点是,两者之间的区别PostMessage()远不止眼前所见。我真的建议您浏览 Raymond 的博客,因为这些年来他介绍了许多问题。

于 2011-07-21T17:13:28.657 回答
4

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

于 2011-07-21T16:26:21.403 回答
3

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

于 2011-07-21T17:10:36.380 回答
2

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

于 2011-07-21T17:13:23.737 回答