SendMessage 和 PostMessage 哪个更好用?

Sep*_*our 9 performance mfc message-queue sendmessage visual-studio-2010

在网上搜索这两个函数调用之间的区别,我发现:

这两个 API 调用之间的区别在于它们将控制权返回给调用应用程序的方式。在发送消息的窗口完成对发送消息的处理之前,SendMessage控件不会返回给调用应用程序,但是PostMessage控件会立即返回给调用应用程序,无论天气如何,发送的消息是否已被处理。

postMessage:在与线程关联的消息队列中发送消息并返回,无需等待线程处理该消息。

SendMessage:调用指定窗口的窗口过程,直到窗口过程处理完消息才返回。

PostMessage是一个异步函数,而SendMessage是一个同步函数。

现在的问题是我的应用程序(需要高性能)哪个功能更好用?

请注意,我在 Visual Studio 2010 和此代码中使用 MFC:

CWnd *pParentOfClass = CWnd::GetParent();
pParentOfClass ->  
Run Code Online (Sandbox Code Playgroud)

我只有这些发送消息的功能:

  • 留言W

  • 发信息

  • 发送消息W

更多问题:
你能告诉我SendMessageSendMessageW之间的区别吗?

bca*_*use 13

您实际上已经通过描述 SendMessage 和 PostMessage 回答了您自己的问题。

SendMessage:发送消息并等待,直到负责该消息的过程完成并返回。

PostMessage:向消息队列发送消息并立即返回。但是您不知道该消息何时真正被处理。因此,如果您希望从该处理过的消息中得到答案,那么您很可能也将通过一条消息得到它。

这真的取决于使用哪个,但最终结果几乎相同,这只是时间问题。此外,PostMessage 在多线程应用程序中特别有用,它允许您通过创建的窗口在线程之间安全地通信。

以 A 或 W 结尾的 PostMessage 或 SendMessage 只是指示如何解释字符串,即分别是单字节还是多字节。没有 A 或 W 结尾的那些是预处理器宏,将委托给您的应用程序设置的任何内容。

  • @sepideh 如果您要询问执行不同操作的两个 API 调用之间的性能比较,那您就错了。 (3认同)
  • 好吧,严格来说,我会说 SendMessage“更快”,因为它不必经过消息队列并立即得到处理。PostMessage 会延迟处理,直到消息发布之前队列中的消息得到处理。因此,为了使其简单且令人满意,**SendMessage 更快**。但再次强调,在谈论高性能时,这不应该是主要关心的问题,这完全取决于您到底想要归档什么。 (2认同)