放牧代码和思想
专注自然语言处理、机器学习算法

PostMessage和SendMessage函数区别

PostMessage和SendMessage函数区别

一个不等待返回, 一个等待

PostMessage和SendMessage的区别

在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如:
打开一个窗口–>等待直到窗口结束
这个时候就可以用到SendMessage

如果在打开这个窗口后仍然需要对该窗口的界面进行设置,比如Edit的value等等,比如:
打开一个窗口–>控制窗口的control的属性
这个时候就需要PostMessage

使用一个钩子程序截获消息后,使用SendMessage把消息发送到主处理程序进行处理,但是在主处理程序还没有完成任务的时候,被设置钩子的程序进入了停止的状态,不可以处理
WM_PAINT,
WM_MOVE,
…….等的基本信息,
必须要等SendMessage发送出的消息完成后,才能继续运行,整个界面一片空白,把钩子消息设置成PostMessage的发送消息形式后,问题解决!

查MSDN对这两个API的定义,
PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
而SendMessage必须等待其他程序处理消息后才返回,继续执行。

PostMessage的返回值表示PostMessage函数执行是否正确;
而SendMessage的返回值表示其他程序处理消息后的返回值。

使用这两个发送消息函数的最重要的是要看你的程序是否要对消息的滞后性关注否,PostMessage会造成消息的滞后性,而SendMessage则不会,但如果SendMessage消息处理失败,则会造成程序停止!

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » PostMessage和SendMessage函数区别

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机