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

简介: 1、消息队列(同步获取消息,主动查询) 分为总消息队列和窗体消息队列两种: 一、系统总消息队列 从输入设备获取用户的各种操作,生成总消息队列。

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

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

一、系统总消息队列

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

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

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

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

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

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

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

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

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


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



目录
相关文章
|
2月前
|
安全 Linux API
操作系统中的窗口焦点和事件的影响
操作系统中的窗口焦点和事件的影响
47 0
|
10月前
|
前端开发
Electron 渲染进程与渲染进程之间的实时通信 (实时触发及接收消息)
Electron 渲染进程与渲染进程之间的实时通信 (实时触发及接收消息)
|
存储 安全 Windows
Win32子窗口创建,子窗口回调函数,消息堆栈,逆向定位子窗口消息处理过程
Win32子窗口创建,子窗口回调函数,消息堆栈,逆向定位子窗口消息处理过程
|
前端开发
如何自定义Electron的通知事件,自定义窗口大小
当外层添加拖拽后,里层添加点击事件时,点击事件的元素要添加这个样式方能添加点击事件
SwiftUI—如何实现对视图显示和消失事件的监听
SwiftUI—如何实现对视图显示和消失事件的监听
618 0
SwiftUI—如何实现对视图显示和消失事件的监听
|
Web App开发 存储 移动开发
跨浏览器窗口通讯 ,7种方式,你还知道几种呢?
为什么会扯到这个话题,最初是源于听 y.qq.com/ QQ音乐, 播放器处于单独的一个页面 当你在另外的一个页面搜索到你满意的歌曲的时候,点击播放或添加到播放队列 你会发现,播放器页面做出了响应的响应 这里我又联想到了商城的购物车的场景,体验确实有提升。 刚开始,我怀疑的是Web Socket作妖,结果通过分析网络请求和看源码,并没有。 最后发现是localStore的storage事件作妖,哈哈。 回归正题,其实在一般正常的知识储备的情况下,我们会想到哪些方案呢?
1062 0
跨浏览器窗口通讯 ,7种方式,你还知道几种呢?
|
Java C# 程序员
WPF程序中的弱事件模式
原文:WPF程序中的弱事件模式 在C#中,得益于强大的GC机制,使得我们开发程序变得非常简单,很多时候我们只需要管使用,而并不需要关心什么时候释放资源。但是,GC有的时并不是按照我们所期望的方式工作。 例如,我想实现一个在窗口的标题栏中实时显示当前的时间,一个比较常规的做法如下:     var...
1100 0
|
Windows
Windows程序设计——窗口键盘消息滚动事件
Windows程序设计——窗口键盘消息滚动事件
250 0
|
安全 C#
WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
原文:WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
1018 0
|
C# Windows
WPF无边框捕获消息改变窗口大小
原文:WPF无边框捕获消息改变窗口大小 文章大部分转载自http://blog.csdn.net/fwj380891124,如有问题,请联系删除  最近一直在学习 WPF,看着别人做的WPF程序那么漂亮,眼红啊~ 很多漂亮的程序都是无边框的。
1186 0