windows消息处理

事先声明,本文大部分为拷贝内容,本文的目的是验证这些内容。

根据windows核心编程所述,线程调用一个与图形用户界面有关的函数(例如检查它的消息队列或建立一个窗口),系统就会为该线程分配一些另外的资源,以便它能够执行与用户界面有关的任务。特别是,系统分配一个THREADINFO结构,并将这个数据结构与线程联系起来。

当一个线程等待SendMessage返回时,它基本上是处于空闲状态。但它可以执行一个任务:如果系统中另外一个线程向一个窗口发送消息,这个窗口是由这个等待SendMessage返回的线程所建立的,则系统要立即处理发送的消息。在这种情况下,系统不必等待线程去调用GetMessage、PeekMessage或WaitMessage。

就上段文字,我所理解的是若一个线程在等待SendMessage返回期间,依然可以处理另外的线程向此线程发送的消息,于是我做了个测试,线程A向线程B发送消息(SendMessage),线程B处理此消息时进入休眠状态。而后线程C向线程A发送消息(SendMessage),发现线程A可以即时的处理线程C发送的消息。我做的这个实验佐证了上段文字。而后我改用Post方式由线程C向线程A发送消息(PostMessage),这时候这个消息并没有得到即时处理,而是等待之前线程A向线程B发送消息处理完毕后在被处理。至于微软这么设计消息交互,大概是为了防止死锁,例如你的线程向另外一个线程发送一个消息,而这个线程又需要向你的线程发送消息。可以使用函数SendMessageTimeout函数改变这种行为(使用参数SMTO_BLOCK)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值