【发布时间】:2011-07-21 16:22:21
【问题描述】:
我想知道调用 SendMessage(哪个阻塞)和调用 PostMessage 与 WaitForSingleObject 有什么区别。 想法?
【问题讨论】:
-
如果你想要同步调用SendMessage。
标签: c++ winapi sendmessage postmessage waitforsingleobject
我想知道调用 SendMessage(哪个阻塞)和调用 PostMessage 与 WaitForSingleObject 有什么区别。 想法?
【问题讨论】:
标签: c++ winapi sendmessage postmessage waitforsingleobject
SendMessage() 可能会被拒绝,如果您从 COM 调用的上下文中调用它,其中 COM 对象位于 STA 中(调用通过消息泵调度)。 PostMessage() 不限于遵守 COM 公寓规则。
另外,PostMessage() 将消息放在窗口消息队列的末尾。 SendMessage() 绕过队列。您可以在 Raymond Chen 的博客 The Old New Thing 上找到关于消息队列的更长讨论。
我的观点是,SendMessage() 和 PostMessage() 之间的区别远不止表面所见。我真的建议您阅读 Raymond 的博客,因为这些年来他介绍了许多问题。
【讨论】:
PostMessage 和 WaitForSingleObject 允许您进行异步消息传递。您可以发送消息、执行其他操作,然后稍后再查看回复。 SendMessage 是同步的,需要你等待。
【讨论】:
我一直认为 SendMessage 直接调用你的 windows 过程,跳过消息队列;而 PostMessage 只是将消息添加到队列中。
【讨论】:
SendMessage 是一个单一的 API 调用,因此不太容易出错。使用内置的而不是自己滚动。
【讨论】: