WINDOWS消息机制(三)---系统消息队列,线程消息队列

在前文中我们讲到,鼠标或者键盘事件产生的消息会送到操作系统的消息队列中,再从系统队列送到各线程对应的消息队列。本文主要讲述的就是系统队列以及线程队列。

1. 系统队列

当操作系统启动并初始化时,线程Raw Input Thread(RIT)就会启动,并创系统硬件输入队列(System Hardware Input Queue)(SHIQ). 对于外部的硬件事件(鼠标或者键盘),硬件驱动会将事件转换成消息,并存放到SHIQ中,而RIT线程就专门负责处理SHIQ中的消息,把消息分发到对应线程的消息队列里面。

2. 线程队列

对于每个用MFC开发的GUI程序,他们都有一个CMy***App,该类继承自CWinApp,而CWinApp继承自CWinThread, CWinApp是一个GUI线程,系统会为其维护一个THREADINFO结构,

 消息队列包含在一个叫THREADINFO的结构中,有四个队列:

Sent Message Queue     发送消息队列
Posted Message Queue   登记消息队列
Visualized Input Queue 输入消息队列
Reply Message Queue    响应消息队列

Sent Message Queue: 该队列保存其他程序通过SendMessage给该线程发送的消息
Posted Message Queue: 该队列保存其他队列通过PostMessage给该线程发送的消息
Visualized Input Queue: 保存系统队列分发过来的消息,比如鼠标或者键盘的消息

Reply Message Queue: 保存向窗体发送消息后的结果,比如sendMessage操作结束后,接收消息方会发送一个Reply消息给发送方的Reply队列中,以唤醒发送队列。

 这些队列如何产生的?线程是内核对象,我们看看线程信息是如何定义的,包含哪些内容,分析如下THREADINFO结构体定义,可以得出一些信息:

图一:THREADINFO简图 (来自WINDOWS核心编程第四版)

该图中很明显的阐述了我们上文所述的四个队列,无需在赘言。

 

总结:

该篇文章主要分析了系统队列、线程队列有谁创建,何时创建的相关信息。

参考:《WINDOWS核心编程 第四版》26章
http://blog.csdn.net/ljfth/article/details/6399237(对队列信息的描述)

注:下文会分析GetMessage的逻辑过程,SendMessage以及PostMessage的相关信息

转载于:https://my.oschina.net/myspaceNUAA/blog/64682

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值