关于伟创 伟创新闻 伟创案例 网站套餐 联系方式
只做吸引客户的精品站!

windows消息之PostMessage和SendMessage的内部实现

伟创软件 / 2013/4/17 7:56:20
[核心提示] 和SendMessage是常用的发送消息函数。那两者有什么区别呢?
windows消息之PostMessage和SendMessage的内部实现
  和SendMessage是常用的发送消息函数。那两者有什么区别呢?
  大家都知道PostMessage是向一个窗口Post一个消息,并且不再关注该消息是否被处理。
  是向窗口发送完消息后,会一直等着该窗口把消息处理完成。
  那下面的问题你能回答么向自身线程窗口发消息与向非自身线程窗口发消息实现方法一样么?
  向自身线程窗口发消息与向非自身线程窗口发消息实现方法一样么?
  的窗口非自身进程,需要做额外的操作么?
  怎么实现消息的同步?
  如果你知道上面的答案,那请关闭该页面。
  以下内容参考了ReactOS 0.3.14源码,并从中整理而来。
  函数大致分为以下步骤:
  如果Wnd为Null,则是一个当前线程消息(与窗口无关),调用UserPostThreadMessage函数处理消息结构到内核(消息结构的Wnd成员为Null)把该消息结构挂接到Wnd对应的线程消息队列中的Post消息链表中置线程消息队列的消息事件为有信号状态,通知它有新消息来了如果Wnd为0xFFFF,则该消息是一个广播,则向该桌面所有顶层窗口发送该消息。使用UserPostMessage函数不为Null也不为0xFFFF,则该窗口为一个有效窗口,这时候会检查Msg是否等于如果Msg等于置消息队列的QuitPosted字段为置退出码到QuitExitCode字段置线程消息队列的消息事件为有信号状态,通知它有新消息来了如果Msg不等于消息结构到内核(这样可以进程间共享)把该消息结构挂接到Wnd对应的线程消息队列中的Post消息链表中置线程消息队列的消息事件为有信号状态,通知它有新消息来了函数大致分为以下步骤:
  复制一份消息结构到内核中,以后就使用内核这份消息结构如果Wnd属于自身线程,则直接调用窗口自身的消息处理函数处理该消息如果WND不属于自身线程窗口构建一个消息结构,并且初始化一个Event事件,如果该消息被处理,该事件就会变成有信号状态把该消息结构挂接到Wnd对应的线程消息队列中的Send消息链表中置线程消息队列的消息事件为有信号状态,通知它有新消息来了调用KeWaitForSingleObject无限等待Event事件。直到变成有信号状态如果消息被处理,则返回有上面的说明可知,PostMessage比SendMessage简洁的多。
  另外SendMessage有好几个变种,如SendMessageCallback、SendMessageTimeout等。
  是吧消息放入Send消息链表中后,不会等待消息被执行,而是直接返回。当该消息被执行时,CallBack函数就会被调用是KeWaitForSingleObject有限等待。如果超时未处理则返回,并把该消息从Send消息列表中摘除。
  最后,回答一下上面提到的问题:
  向自身线程窗口发消息与向非自身线程窗口发消息实现方法一样么?
  一样向自身线程窗口发消息与向非自身线程窗口发消息实现方法一样么?
  不一样的窗口非自身进程,需要做额外的操作么?
  消息与进程无关怎么实现消息的同步?
  通过KeWaitForSingleObject等待Event事件。该消息被处理时Event就会被置成有信号状态
尊重作者原创 除非特别声明,伟创科技所有均为伟创原创报道,转载请注明原文链接。
原文地址:http://www.lywhy.com/SoftWare/View.asp?id=438  所属类别:软件开发
相关内容
洛阳软件开发需要多少钱? 2019/12/6
10种不同类型的软件开发 2019/11/5
如何更好的完成软件开发的项目 2018/9/18
伟创技术-婷婷:身为.NET程序员的断想 2017/2/18
【洛阳网络公司技术分享】身为.NET程序员的断想 2016/1/28
猜你喜欢
伟创科技如何看待先出网站版面再付定金问题的解答 2014/12/6
好网站真的需要漂亮的外表么? 2012/10/12
于2012年11月伟创与洛阳银胜得投资担保公司签订网站制作合同 2012/11/14
洛阳网络公司伟创科技主编自今日起回家休养2天,其他工作照常进行! 2013/1/12
企业网站的管理要注重不间断、延续性 2014/6/12
在这辞旧迎新的元旦过后第二天,伟创科技再次愿支持伟创科技的所以朋友,新年好运! 2013/1/2
展示型网站和营销型网站有何差异? 2015/5/4
HTML5就要来了 IE6怎么办 2013/2/27
去掉网站上的噪声数据以优化网站排名 2013/8/17
2016洛阳网络公司市场将会有如何变数 2016/1/14
伟创热点
关于我们
公司简介
我们的优势
企业文化
公司愿景
加入伟创
伟创官方博客
金牌项目
网站建设
网站优化
软件开发
整合设计
网站运营
网站套餐
基础型网站
展示型网站
商务型网站
购物、商店型网站
FLASH动画型网站
行业、门户型网站
帮助中心
客户中心
公司SEO培训
seo顾问服务
支付方式
联系我们
我们的位置
关注我们
新浪微博
腾讯微博
人人小站
QQ空间推荐
花瓣网
建站百科全书
Copyright 2007-2012 LYWHY.Inc Sitemap 豫ICP备12012069号-1
Links
洛阳百科
建站百科