Day1:Windows消息循环机制

news2024/11/27 18:47:46

先区分几个概念

系统:特指Windwos操作系统

应用程序:指一个程序,比如QQ,微信等

窗口:每个应用程序都 可以拥有窗口,而且可以有多个,但一般会有一个主窗口。

消息:window系统定义了很多种消息,例如,单击鼠标、改变窗口尺寸、按下键盘,这些操作都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息

消息循环:window系统的一种消息机制

消息队列:是属于线程的,是windows系统为线程创建并维护的一个队列,用于存放各类消息。 系统自身维护一个系统消息队列,然后还为每个GUI线程,维护一个线程专门消息队列。

线程:每个线程默认是没有消息队列的,线程只有在第一次调用用户接口时(比如创建窗口,或者是操作UI元素时),系统才为其创建消息队列。一个应用程序可以有多个线程,但只能有一个UI线程,默认为主线程,其他子线程是无法操作UI并创建UI元素的。这是windows规定的

消息循环图解

循环的具体流程:

第一步:

我们创建完win32应用程序,当用户通过对鼠标,键盘操作应用程序时,由于Windows一直监控着I/O设备,该事件首先会被转化成消息,由windows系统捕获,存放于系统消息队列。

第二步:

Windows系统知道该消息应由哪个应用程序处理,然后拷贝到相应的应用程序消息队列。同时将该消息从系统消息队列中删除。

第三步:

应用程序的消息循环不断在执行,此时,调用GetMessage()从消息队列中查找消息,发现了该消息,GetMessage()将返回一个正值,并获取到了该消息Msg;PS:如果消息队列为空,程序将停止执行并等待(程序阻塞)。

第四步:

然后取出消息(Msg)并将其传递给TranslateMessage()函数,这个函数做一些额外的处理:将虚拟键值信息转换为字符信息。这一步实际上是可选的,但有些地方需要用到这一步。

第五步:
上面的步骤执行完后,将消息MSG传递给DispatchMessage()函数。DispatchMessage()函数将消息再给windows系统,由windows系统找到目标窗口并分发给该窗口,调用消息对应的窗口过程函数,既窗口的WinPro函数,让WinPro函数处理。WinPro函数可以允许我们对不同的消息做特定的处理,若不处理的话,则会调用DefWindowProc函数,做默认处理,所以为什么默认代码中WinPro的类型是CallBack(回调),因为不是我们主动调用的,是系统回调的

第六步:

一旦一个消息处理完成,窗口过程WinPro函数返回,DispatchMessage()函数返回,应用程序的消息循环继续while循环,Window系统继续监控各类消息,重复上述步骤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系统集成项目管理工程师】计算题专题二

七、进度网络计算题 1、单代号网络图 六标时图 正推取大(红色);反推取小(绿色) 关键路径:ACDE(关键路径下的活动总浮动时间都是 0) 浮动时间(总时长)&…

《Spring Guides系列学习》guide31 - guide34 及中期简单回顾

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

Scrum敏捷迭代规划和执行

Sprint Backlog看板 迭代工作的开展是围绕Sprint Backlog展开的,在Leangoo中,我们需要为每个迭代创建一个Sprint Backlog看板。Sprint Backlog(迭代)看板,用于管理当前Sprint的需求和开发任务,可视化展示每…

Cesium教程(七):加载自定义影像数据

GIS开发中经常需要调用本地或供应方发布的影像数据,加载独立的场景,此时可以借助GeoServer发 布自定义影像数据。 geoserver下载地址:geoserver下载 1、geoserver安装 1.1 安装方式1(推荐) 要求已安装tomcat:下载 Web Archive 版本的GeoServer,下载完毕解压,目 录如…

【JavaSE】Java基础语法(十九):接口新特性

文章目录 1. 接口组成更新概述2. 接口中默认方法3. 接口中静态方法4. 接口中私有方法 1. 接口组成更新概述 常量:接口可以定义全局常量,使用关键字public static final修饰。 抽象方法:接口中可以定义抽象方法,使用关键字public…

零基础如何入门网络安全?2023年专业学习路线看这篇就够了

前景 很多零基础朋友开始将网络安全作为发展的大方向,的确,现如今网络安全已经成为了一个新的就业风口,不仅大学里开设相关学科,连市场上也开始大量招人。 那么网络安全到底前景如何?大致从市场规模、政策扶持、就业…

汽车以太网通道和相关组件的测试

随着车载网络的发展,已经出现了CAN、LIN、FlexRay、MOST等成熟的协议,而基于LVDS/USB技术的链路传输模式也得到了广泛的应用。然而,面对不断提高的摄像头、显示器和不同传感器系统共享的更复杂信息分辨率,就需要更高的传输速度。 …

企业内容管理入门指南:从概念到实践,提升协作效率和质量

在现代企业管理中,存在一种容易被忽视但又极为重要的管理理念——企业内容管理。由于“企业内容”这一概念过于抽象,大家对它可能还比较模糊。所以,今天我们来聊聊企业内容管理。 在开始之前,对企业内容做一个简明的介绍&#x…

API对接是什么意思,技术分享

在计算机科学中,应用程序接口(API)是一种程序编程接口,定义了应用程序之间或应用程序和操作系统之间的通信方式。API对接就是在不同的应用程序之间实现数据交换和信息传输的过程。当两个不同的应用程序需要共享数据时,…

黄河千年清一回与人类健康

黄河千年清一回奏响一曲曲让人类走进幸福新时代的壮丽凯歌。疫情之后的首届全世界健康产业发展大会 5 月28 日上午 9 时在中国首都北京召开 The Yellow River has played a magnificent song of triumph in the millennium, ushering humanity into a new era of happiness. T…

常见通信名词的解释

在通信接口的介绍中,难免见到全双工/半双工/单工、同步/异步等这些名词。今天就专门来介绍一下这些名词。 1. 什么是全双工/半双工/单工 数据通信中,数据在线路上的传送方式可以分为单工通信、半双工通信和全双工通信三种。 单工通信:是指…

关于原生feign发起请求时,参数注解的相关问题

先说结论: POST请求必须指定请求头,body参数用RequestBody或者Param(需要一个一个写)。 GET请求,传参只能用QueryMap,后边变量是Map形式,哪怕是一个参数也必须放到map里边。如果是路径变量&…

MySql基础学习(1)

MySql基础学习 一、数据库1.1 什么是数据库1.2 MySql的启动与停止1.3 MySql数据模型 二、SQL2.1 SQL通用语法2.2 SQL分类2.2.1 数据类型2.2.2 DDL使用方法2.2.3 、表操作-修改&删除DDL总结 2.3 DML2.3.1 DML添加数据2.3.2 DML---修改数据2.3.3 DML---删除数据DML总结 2.4 D…

【C++从入门到放弃】vector深度剖析及模拟实现

🧑‍💻作者: 情话0.0 📝专栏:《C从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! vecto…

当二叉树遇上递归:如何判断单值二叉树?

本篇博客会讲解力扣“965. 单值二叉树”的解题思路,这是题目链接。 先来审题: 以下是输出示例: 以下是提示: 本题非常适合使用递归实现。分以下情况讨论: 若是空树,则符合单值二叉树的性质。若非空&am…

[Nacos] Nacos Server处理注销请求 (七)

文章目录 1.InstanceController.deregister()1.1 从请求中获取要操作的instance1.2 删除instance 1.InstanceController.deregister() 从请求中获取要操作的instance从注册表中获取service从获取的service中删除instance 1.1 从请求中获取要操作的instance private Instance g…

什么是SOAP

什么是SOAP 什么是SOAP? SOAP (Simple Object Access Protocol) 是一种基于XML的通信协议,用于在网络上交换结构化的信息。它被广泛用于分布式系统中的应用程序间通信。 SOAP定义了一组规范,描述了消息的格式、通信的方式和处理消息的过程。它允许应…

23种设计模式之解释器模式(Interpreter Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的解释器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬…

C语言打印九九乘法表的多种方式多种形式(完整,左上,左下,右上,右下)

📢博客主页:肩匣与橘📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由肩匣与橘编写,首发于CSDN🙉📢生活依旧是美好而又温柔的,你也是✨ …

机器学习_Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍_02---人工智能工作笔记0037

Lasso回归用的是L1正则化可以看到,这里的alpha就是这里的alpha对吧,就是 L1的权重 然后对于ElasticNet回归来说,这里的alpha可以看到是L1权重的超参数对吧,然后这里的p,表示的是 L2正则里面的(1-p)这里 这里要提一下: L1和L2为什么能防止过拟合,它们有什么区别?通过添加…