视窗图形系统的两种事件消息实现机制

1、消息队列(同步获取消息,主动查询)

分为总消息队列和窗体消息队列两种:

一、系统总消息队列

从输入设备获取用户的各种操作,生成总消息队列。

二、应用(窗体,包括子窗体和控件,下面统称应用)消息队列

每个应用都有一个自己的消息队列,应用根据需要向总消息队列注册自己需要的消息事件,然后总消息队列根据一定的算法(包括各种事件消息的处理机制,活动应用,窗体处理等)得到最终需要分发的应用,然后将总消息队列中的消息分发到刚刚得到的应用对应的消息队列中。

每个应用都有一个自己消息循环,包括主动向窗体消息队列获取消息,分发消息,处理消息。

应用获取消息的时候有两种情况:

自己的消息队列中有消息,然后获取,分发,处理,再次获取。

自己的消息队列中暂时没有消息,阻塞等待消息队列有消息事件,这里不存在超时,消息队列中新增了消息,唤醒刚刚阻塞的获取消息线程,继续获取消息,然后分发,处理,再次获取。

2、事件注册(异步获取消息,被动通知)

系统有一个总的事件表,每个表项对应一个事件,同时每个表项下面挂一个链表,这个链表是由注册这个消息事件的所有应用组成。当消息事件到来时,根据一定的算法得到链表中最终需要通知的应用,然后通知,应用得到通知到再进一步分发、处理。


以上都是个人理解,如有不对和偏差希望大家多多指教,同时讲的也比较简单,具体实现过程要比说的复杂的多,而且有很多情况需要考虑进去,这里仅仅是说了一个原理和大概。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值