SendMessage和PostMessage哪个更好用?

时间:2013-08-30 07:08:29

标签: visual-studio-2010 performance mfc message-queue sendmessage

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

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

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

SendMessage:调用指定窗口的窗口过程,并且在窗口过程处理完消息之前不会返回。

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

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

请注意,我在visual studio 2010中使用MFC并使用此代码:

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

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

  • PostMessageW

  • 的SendMessage

  • SendMessageW

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

1 个答案:

答案 0 :(得分:4)

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

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

PostMessage:将消息发送到消息队列并立即返回。但是你不知道该消息何时被实际处理。因此,如果您希望从已处理的邮件中获得答案,那么您很可能也会通过邮件获得答案。

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

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