MFC中消息循环处理的几个函数之间的区别

简介: Windows编程中一个比较原始的问题就是消息循环,现在很少有人关心这些了;   我个人对消息循环比较感兴趣,对底层的很多细节想深入了解!   以下说明几个消息循环中的常用函数进行对比   1 PostMessage 与 SendMessage 函数对比   SendMessage把消息直...
Windows编程中一个比较原始的问题就是消息循环,现在很少有人关心这些了;

  我个人对消息循环比较感兴趣,对底层的很多细节想深入了解!

  以下说明几个消息循环中的常用函数进行对比

  1 PostMessage 与 SendMessage 函数对比

  SendMessage把消息直接发送到窗口,并调用此窗口的相应消息处理函数,等消息处理函数结束后SendMessage才返回!SendMessage发送的消息不进入系统的消息队列;SendMessage函数有返回值

  PostMessage将消息发送到与创建窗口的线程相关联的消息队列后立即返回;PostMessage函数没有返回值;

  2 GetMessage 与 PeekMessage函数的对比

  GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)

  PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax,UINT wRemoveMsg)

  根据参数可以看出以上2个函数的区别,参数wRemoveMsg的作用是指定消息获取的方式,如果设为PM_NOREMOVE,那么消息将不会从消息队列中被移出,如果设为PM_REMOVE,那么消息将会从消息队列中被移出;

  还有区别:

  他们如果没有捕获到消息,程序的主线程会被操作系统挂起。当操作系统再次回来照顾此线程时,发现消息队列中仍然没有消息可取,此时两个函数的行为就不同了:

  GetMessage : 过门不入,操作系统再次挂起此线程,去照顾别的线程;

  PeekMessage: 取回控制权,使程序执行一段时间,等待可能的消息进入消息队列并将其捕获;这时程序进入空闲时间阶段;

目录
相关文章
|
安全 网络安全 数据库
“小红书基于零信任的数据安全落地实践”演讲实录
11月,为期两天的FCIS 2023网络安全创新大会(以下简称:“FCIS 2023大会”)在上海张江科学会堂圆满落幕。来自全球的数十位网络安全人物、企业安全负责人、技术大拿、研究学者等发表主题演讲,累计线下参会观众突破6000人次。 在主论坛E-Tech企业安全实践分享中,亿格云行业标杆客户「小红书安全技术负责人、首席数据官」周达发表了“基于零信任的数据安全建设实践”的主题演讲。分别从办公场景下的数据安全挑战、小红书全链路零信任体系和安全思考与展望三方面详细阐述。
|
运维 负载均衡 Cloud Native
云原生网关MSE-Higress对比测评
本文将从功能、性能、架构、可扩展性、运维、价格等6个维度简析MSE-Higress与其竞品的差异和优缺点。
1918 1
|
负载均衡 算法 物联网
探索操作系统的多任务处理能力
【6月更文挑战第3天】本文将深入探讨现代操作系统中的多任务处理技术,分析其原理、实现方式以及在实际应用中的表现。通过对比不同操作系统的多任务处理策略,我们将揭示它们在资源分配、任务调度和性能优化方面的异同。此外,文章还将讨论多任务处理对用户体验的影响,并提出未来可能的发展趋势。
|
Dart Unix
Flutter 学习 之 时间转换工具类
Flutter 学习之时间转换工具类 在 Flutter 应用程序开发中,处理时间戳是非常常见的需求。我们通常需要将时间戳转换为人类可读的日期时间格式。为了实现这一点,我们可以创建一个时间转换工具类。
399 1
|
XML JSON 编解码
|
关系型数据库 MySQL 数据库
MySQLTransactionRollbackException问题排查
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction MySQL error 1129
647 0
|
安全 搜索推荐
如何避免写重复代码?两种常见的方法:抽象和组合
如何避免写重复代码?两种常见的方法:抽象和组合
420 0
|
缓存 网络协议 安全
ARP攻击详细讲解
ARP攻击详细讲解
471 0
ARP攻击详细讲解
|
算法 Java 测试技术
精讲高并发核心编程,限流原理与实战,限流策略原理与参考实现
限流原理与实战 在通信领域中,限流技术(Time Limiting)被用来控制网络接口收发通信数据的速率,实现通信时的优化性能、较少延迟和提高带宽等。 互联网领域中借鉴了通信领域的限流概念,用来控制在高并发、大流量的场景中对服务接口请求的速率,比如双十一秒杀、抢购、抢票、抢单等场景。 举一个具体的例子,假设某个接口能够扛住的QPS为10 000,这时有20 000个请求进来,经过限流模块,会先放10 000个请求,其余的请求会阻塞一段时间。不简单粗暴地返回404,让客户端重试,同时又能起到流量削峰的作用。
精讲高并发核心编程,限流原理与实战,限流策略原理与参考实现
|
关系型数据库 MySQL 数据库
MySQL 数据库范式设计理论概述
范式来自来自英文 Normal From 。开发过程中要设计一个好的数据库逻辑关系,必须满足一定的约束条件,此约束条件形成了开发范式,分成几个等级,一级比一级严格。
341 0