关于消息队列的一些疑惑,清楚的XDJM进
1》在windows中一个有几个系统消息队列?以下是查到的资料
A答案:
系统消息队列(System Message Queue)
这是一个系统唯一的Queue,设备驱动(mouse, keyboard)会把操作输入转化成消息存在系统队列中,然后系统会把此消息放到目标窗口所在的线程的消息队列(thread-specific message queue)中等待处理
B答案:
对于硬件消息,Windows系统启动时会运行一个叫Raw Input Thread的线程,简称RIT。这个线程负责处理System Hardware Input Queue(SHIQ)里面的消息,这些消息由硬件驱动发送。RIT负责把SHIQ里的消息分发到线程的消息队列里面,那RIT是如何知道该发给谁呢?如果是鼠标事件,那就看鼠标指针所指的窗口属于哪个线程,如果是键盘那就看哪个窗口当前是激活的。一些特殊的按键会有所不同,比如 Alt+Tab,Ctrl+Alt+Del等,RIT能保证他们不受当前线程的影响而死锁。RIT只能同时和一个线程关联起来。
有可能,Windows系统还维护了除SHIQ外地其他队列,分发给线程的队列,或者直接发给窗口的处理函
我的疑问:1》SHIQ 是不是 System Message Queue呢?
2》Windows系统到底有几个系统队列 ? 有哪些权威的书上有明确的关于这些的说明,比如<<windows 核心编程>> 有 吗?我看书比较粗糙麻烦大家了
3》所有的消息路由顺序都是先到系统队列,处理后在发到各个对应的线程的消息队列的吗?这个结论又是从哪来的
呢?