Windows消息机制

Dos是单线程的操作系统也就是说一开始运行,除了系统的中断处理程序之外就只能运行该程序,直到该程序完成之后退出,才能执行下个程序。

和Dos不同,Windows是一个多任务多线程的操作系统,它允许多个应用程序同时运行,大大增加了系统的效率,用户可以一边听歌,一边玩游戏,这些程序可以同时运行,这里的同时运行是用户感受起来,而本质其实一个单核CPU只能在一个时间点做一件事情,由于Windows操作系统处理运用程序采用了时间轮转等调度算法,每个程序都占用一个时间片来运行,然后轮到下一个应用程序运行,程序间的切换太快了导致人的肉眼和听觉无法感受到这种不流畅,所以感受起来就好像是同时都在运行一样。而负责判断下一个运用程序,和给每个应用程序分配运行时间的工作就是操作系统内核的调度程序的工作。

一:系统分配投递消息

操作系统有个消息循环用于捕捉硬件如键盘,鼠标等信息,当鼠标点击的时候,操作系统会把鼠标点击所产生的消息(消息结构体里面包含了点击时间,位置坐标等足够的信息)投递到操作系统这个大的消息队列中,然后Windows系统的内核进行分析这个点是处于哪个窗口的,是属于哪个应用程序的,经过分析之后再把消息投递到了对应的单个应用程序里面,告诉它鼠标在某个位置进行了点击,而对应的消息要如何处理则需要应用程序里面来进行命令,这部分就是程序员大部分的工作,也就是具体程序中的消息回调方程里面的响应。

Windows是如何知道这个点击的消息应该交给哪个窗口来处理的?这是因为每个应用程序在运行的时候Windows操作系统都会注册了该程序的相关信息,登记一些关键信息和入口,设计窗口类之后之所以要进行RegisterClassEx(&wndclass);是因为wndclass里面包含消息回调方程这个函数指针的赋值等信息,知道了这些信息和入口,操作系统就能准确分配消息了。

二:应用程序处理消息

每个应用程序内部也有一个消息循环队列,用于管理和处理系统分配进来的消息,应用程序根据对应的消息下的处理逻辑,同时产生一些反馈的消息返回给操作系统,让操作系统通知显卡去画图,声卡去发出声音等。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值