SendMessage 和 PostMessage 哪个更好用?

问题描述 投票:0回答:2

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

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

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

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

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

现在的问题是,对于我的应用程序(需要高性能)来说,使用哪个函数更好?

请注意,我在 Visual Studio 2010 中使用 MFC,并且对于此代码:

CWnd *pParentOfClass = CWnd::GetParent();
pParentOfClass ->  

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

  • 留言W

  • 发送消息

  • 发送消息W

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

visual-studio-2010 performance mfc message-queue sendmessage
2个回答
23
投票

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

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

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

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

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


0
投票
我相信您应该参考与此问题相关的答案:

SendMessage vs PostMessage + WaitForSingleObject,因为两者之间的区别比“只是消息队列的时间”要深入得多。

© www.soinside.com 2019 - 2024. All rights reserved.