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

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

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

一、系统总消息队列

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

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

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

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

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

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

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

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

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

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

时间: 2024-09-30 22:40:17

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

ASP.net组件编程中的两种事件编写方法

asp.net|编程 以下是组件代码:using System;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel; namespace NSEventStudy{ public delegate void TwoEventHandle(int flag); public class EventStudy : System.Web.UI.WebControls.WebControl { /

IBM Business Monitor两种入站事件发射器服务的介绍与使用

IBM Business Monitor 产品提供一种称为入站事件发射器服务的功能,任何应用通过调用入站事件发射器服务,可以很容易的实现往 Monitor 服务器发送事件.本文将主要介绍 Monitor 产品提供的两种类型的入站事件发射器的使用. IBM Business Monitor 产品(以下简称 Monitor)基于监控模型对事件的接收和处理来完成对事件源的监控,这里所说的事件源可以使任何应用程序,比如常见的http://www.aliyun.com/zixun/aggregation/

《游戏大师Chris Crawford谈互动叙事》一1.2 两种思维方式

1.2 两种思维方式 游戏大师Chris Crawford谈互动叙事人类思维方式存有两种截然不同的机制.占主导地位的是基于模式(pattern)的机制.神经系统最初就是由此发展出来的.基于模式的思维方式又快速又强大:由外界输入的模式一旦进入大脑,大脑就利用既有的模式来处理新输入进来的模式,从而产生反应模式.比如说,一只小动物从眼前看到的场面当中辨识出"巨齿.大眼.利爪"的模式,它的大脑便立刻处理之,然后立即确定反应模式,即激活不同的肌肉组织,实现转身,迅速逃离是非之地. 基于模式的思维

js事件监听机制(事件捕获)总结_javascript技巧

在前端开发过程中我们经常会遇到给页面元素添加事件的问题,添加事件的js方法也很多,有直接加到页面结构上的,有使用一些js事件监听的方法,由于各个浏览器对事件冒泡事件监听的机制不同,le浏览器只有事件冒泡,没有事件监听的机制,对于事件监听的兼容性问题是最大的难题: 1.直接把事件的方法写在页面结构上 function eventfun(){ //console.log(this); } <input type="button" onclick="eventfun()&qu

请问 API 中说的 消息监听 :以上两种方式都可以执行相同的操作,但是广播和监听事件不可同时混用 的 具体意思

问题描述 在同一个 activity 或者appliction 中同时 注册了 两种会怎么样? 同时接受两次?在appliction 中注册了 监听事件, 在 activity 中注册广播 这也是混用?会怎么样? 解决方案 你的项目里只能选择其中一种方式使用,两种混用的话,收到消息之后,广播和监听都不执行

C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法

你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法:   要么重写需要弹出的窗体的事件: protected override CreateParams CreateParams     {     get     {         const int WS_EX_NOACTIVATE = 0x08000000;         CreateParams cp = base.CreateParams;         cp.ExStyle |

PHP实现弹出消息提示框的两种方法

 这篇文章主要介绍了用PHP实现弹出消息提示框的两种方法,有需要的朋友可以参考一下 方法一:  代码如下: echo "<script>alert('提示内容')</script>";   方法二: 代码如下: echo '<script language="JavaScript">;alert("这是";location.href="index.htm";</script>;'

鼠标移入移出事件改变图片的分辨率的两种方法

 做一个鼠标移入移出图片事件,首先是改变分辨率的两种方法,鼠标移入图片和移出图片的分辨率不同,具体实现如下,感兴趣的朋友可以参考下 最近在做一个鼠标移入移出图片事件,有几种方法大家可以试一下  首先是改变分辨率的两种方法,鼠标移入图片和移出图片的分辨率不同  方法一   代码如下: <html xmlns="http://www.w3.org/1999/xhtml">  <head>  <meta http-equiv="Content-Type

javascript事件函数中获得事件源的两种不错方法

 许多情况我们需要获得事件源对象来对其属性进行更改,在事件响应函数中获得事件源的方法有如下两种 在javascript的事件响应中,许多情况我们需要获得事件源对象来对其属性进行更改,比如更改img的src属性.在事件响应函数中获得事件源的方法有如下两种:    第一种:    直接把作为一个参数传入.例如   代码如下: <div id="myid" onclick="show(this);">text</div>    <script