1、消息队列(同步获取消息,主动查询)
分为总消息队列和窗体消息队列两种:
一、系统总消息队列
从输入设备获取用户的各种操作,生成总消息队列。
二、应用(窗体,包括子窗体和控件,下面统称应用)消息队列
每个应用都有一个自己的消息队列,应用根据需要向总消息队列注册自己需要的消息事件,然后总消息队列根据一定的算法(包括各种事件消息的处理机制,活动应用,窗体处理等)得到最终需要分发的应用,然后将总消息队列中的消息分发到刚刚得到的应用对应的消息队列中。
每个应用都有一个自己消息循环,包括主动向窗体消息队列获取消息,分发消息,处理消息。
应用获取消息的时候有两种情况:
自己的消息队列中有消息,然后获取,分发,处理,再次获取。
自己的消息队列中暂时没有消息,阻塞等待消息队列有消息事件,这里不存在超时,消息队列中新增了消息,唤醒刚刚阻塞的获取消息线程,继续获取消息,然后分发,处理,再次获取。
2、事件注册(异步获取消息,被动通知)
系统有一个总的事件表,每个表项对应一个事件,同时每个表项下面挂一个链表,这个链表是由注册这个消息事件的所有应用组成。当消息事件到来时,根据一定的算法得到链表中最终需要通知的应用,然后通知,应用得到通知到再进一步分发、处理。
以上都是个人理解,如有不对和偏差希望大家多多指教,同时讲的也比较简单,具体实现过程要比说的复杂的多,而且有很多情况需要考虑进去,这里仅仅是说了一个原理和大概。
时间: 2024-09-30 22:40:17