windows下GetMessage和PeekMessage函数区别

【MFC】PeekMessage() 与GetMessage() 消息函数 01、目录 目录01、目录02、简言03、PeekMessage() Function3.1 语法(Syntax)3.2 参数(Parameters)3.3 返回值(Return value)04、GetMessage() Function4.1 语法(Syntax)4.2 参数(Parameters)4.3 返回值(Return value)05、示例助教06、总结 02、简言 想必了解过MFC(windows程序)的都知道,windows的程序全是由消息驱动的。不敢干什么,都是通过各种各样的消息来做一些 阅读详情

GetMessage 和 PeekMessage 是 Windows API 中用于处理消息队列的函数,主要用于应用程序的消息循环。它们的主要区别在于处理消息队列为空时的行为、返回值以及可选的移除选项。下面详细说明:

主要区别:

  • 阻塞行为:
    • GetMessage:如果消息队列为空,它会阻塞当前线程(即挂起等待),直到有新消息进入队列才会返回。这适合标准的消息驱动应用程序,确保线程在无消息时不消耗 CPU。
    • PeekMessage:如果消息队列为空,它会立即返回,而不会阻塞线程。这允许应用程序在无消息时执行其他任务,如游戏中的实时渲染或动画。
  • 消息移除:
    • GetMessage:总是从队列中移除检索到的消息。
    • PeekMessage:默认移除消息(使用 PM_REMOVE 标志),但可以通过 PM_NOREMOVE 标志选择不移除消息,让消息留在队列中供后续处理。
  • 返回值:
    • GetMessage:如果检索到的消息不是 WM_QUIT,则返回 TRUE;如果是 WM_QUIT,则返回 FALSE(通常用于退出消息循环)。如果发生错误,返回 -1。
    • PeekMessage:如果成功检索到消息,返回 TRUE;如果队列为空,返回 FALSE。
  • 使用场景:
    • GetMessage 常用于标准的阻塞式消息循环(如 WinMain 中的 while 循环),确保高效的资源使用。
    • PeekMessage 常用于需要非阻塞处理的场景,如需要周期性更新 UI 或处理实时事件的应用程序。

示例代码(伪代码):

标准 GetMessage 循环:

while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

非阻塞 PeekMessage 循环:

while (running) {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
        if (msg.message == WM_QUIT) break;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    } else {
        // 执行其他任务,如渲染或计算
    }
}

消息过滤参数详解

在 Windows 消息处理中,GetMessage 和 PeekMessage 函数共享类似的消息过滤参数,主要包括 wMsgFilterMin 和 wMsgFilterMax,用于指定要检索的消息 ID 范围。这些参数允许开发者精确控制从消息队列中获取哪些类型的消息(如键盘、鼠标或特定系统消息)。此外,PeekMessage 还有额外的 wRemoveMsg 参数,用于控制是否移除消息。下面基于官方文档进行详细解释。

1. 共同参数:wMsgFilterMin 和 wMsgFilterMax

这两个参数定义了消息过滤的范围,只检索消息 ID(即 WM_ 常量)在 [wMs

MFC中PeekMessage与GetMessage的区别 一、PeekMessage与GetMessage的对比 相同点: PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中的消息派发出去。 不同点: GetMessage的主要功能是从消息队列中“取出”消息,消息被取出以后,就从消息队列中将其删除;而PeekMessage的主要功能是“窥视”消息,如果有消息,就返回true,否则返回false。 也可以使用PeekMessage从消息队列中取出消息,这要用到它的一个参数(UINT wRemoveMsg),如果设 阅读详情

相关推荐

卡诺图化简法注意事项+竞争冒险知识点总结

今天反思以下卡诺图化简法中的注意事项。 卡诺图看起来简单,但如果不熟悉的话很容易出错,因此要对画圈的规则比较熟悉。

weixin_42415266的博客 1万+

软考中级-系统集成项目管理工程师**的超详细知识点笔记。

软考中级系统集成项目管理工程师核心知识点摘要 综合知识:涵盖信息化基础(国家信息化六要素、信息系统开发方法)、系统集成特点(高技术性、团队协作)、IT服务管理(ITIL流程)、网络技术(OSI模型、TCP/IP)、信息安全(CIA三要素、加密技术)、软件工程(生命周期、测试类型)、面向对象分析与设计(UML图)、新一代信息技术(云计算、大数据、物联网)。 案例分析:聚焦项目管理十大知识领域,重点包括: 整体管理(项目章程、变更控制流程) 范围管理(WBS分解、需求跟踪矩阵) 进度管理

最爱で毛毛熊的博客 1981

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1216

Allegro Design Entry CIS 与 OrCAD Capture CIS:PCB设计工具链中的双雄对决

本文深入对比了Cadence旗下两大原理图设计工具Allegro Design Entry CIS与OrCAD Capture CIS。Allegro Design Entry CIS源自Concept HDL,定位高端,强调自顶向下的层次化设计和与Allegro PCB Editor的无缝约束管理,适合大型复杂系统及团队协作。OrCAD Capture CIS则以其出色的易用性、广泛的兼容性和强大的CIS数据库功能著称,是中小型项目及跨工具链协作的通用选择。文章从历史渊源、核心功能、适用场景等多维度剖析,

bush的博客 483

Python爬虫实战:美团外卖商家数据抓取与分析

随着互联网技术的快速发展,外卖平台已成为人们日常生活中不可或缺的一部分。本文基于Python爬虫技术,使用最新的异步爬虫框架和反爬虫绕过技术,实现了对美团外卖平台商家信息与评分数据的自动化抓取。通过对抓取数据的清洗、存储和分析,为餐饮行业市场研究和商业决策提供数据支持。本文详细介绍了爬虫的设计思路、技术实现方案、数据处理方法以及可视化分析结果,为相关领域的研究者和开发者提供参考。关键词:Python爬虫;美团外卖;数据抓取;数据分析;异步爬虫。

2201_76125261的博客 1816

Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)

Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1180

【深度学习】脸部修复,CodeFormer,论文,实战

Blind face restoration是一个高度 ill-posed 的问题,通常需要辅助引导来 1) 改善从降级输入到期望输出的映射,或者 2) 补充在输入中丢失的高质量细节。在本文中,我们展示了在一个小的代理空间中学到的离散码本先验可以通过将盲目的面部恢复建模为 a code prediction task来大大减少恢复映射的不确定性和模糊性,同时为生成高质量面部提供丰富的视觉元素。

q742971636的博客 2979

第3章: MMU Interval Notifier 区间通知器的核心原理⭐

摘要:区间级内存通知机制分析 本文分析了Linux内核中区间级内存通知机制(mmu_interval_notifier)的设计原理与实现。该机制针对传统全局通知(mmu_notifier)存在的性能开销大、无法精确控制等问题,通过引入区间树(Interval Tree)实现精确匹配,仅当内存变化与注册区间重叠时才触发回调。核心优势包括:1)O(log n + k)的高效查找性能;2)支持独立管理各内存区间;3)实现高并发处理不同区间的失效事件。

图形/计算GPU的驱动与虚拟化技术分享园地 1992

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 再谈Socket编程中阻塞/非阻塞模式
下一篇: ICS v9.5 OverbyteIcsWSocket.pas 整体架构分析
sonadorje
博客等级 码龄17年 101粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值