当前位置:网站首页>对话框管理器第六章:消息循环中的细节
对话框管理器第六章:消息循环中的细节
2022-08-08 18:56:00 【拓扑梅尔-漫漫开发路】
在上一篇文章中,我留下了一道课后作业:找到EndManualModalDialog和模态对话框消息循环之间的细微Bug。
微妙之处在于:EndManualModalDialog会在内部设置了一些标志,但没有强制消息循环注意到该标志已实际设置。回想一下,GetMessage函数在投递性消息(Posted Message)到达消息队列之前不会返回。 如果传入的已发送消息到达,则将它们传递到相应的窗口过程,但GetMessage函数不返回。 它只是不断传递传入的已发送消息,直到投递性消息最终到达。
因此,Bug是:当你调用EndManualModalDialog时,它会设置指示模式消息循环停止运行的标志,但不会做任何事情来确保模式消息循环会检测这个标志。 在发布的消息到达之前什么都不会发生,这会导致GetMessage返回。 发送消息并重新启动while循环,此时代码最终注意到fEnded标志已设置并跳出模式消息循环。
有几种方法可以解决这个问题。比较快速的方法是:发布一条毫无意义的消息,如下图所示:
这将强制GetMessage返回,因为我们确保队列中至少有一条消息等待处理。 我们选择了 WM_NULL消息,因为它什么都不做。 我们对消息的作用不感兴趣,只对消息存在的事实感兴趣。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《The dialog manager, part 6: Subtleties in message loops》
边栏推荐
- uniapp parent component uses prop to pass asynchronous data to child components
- PG's huge page
- 21天学习挑战赛——机器学习02
- [BJDCTF2020]Easy MD5
- 什么是Shell?从小白到入门你只差一个它
- 传音控股:目前公司手机产品暂无明确计划进入中国市场
- 进化的黑产 vs 进击的蚂蚁:支付宝的每一次点击,都离不开一张“图”的守护
- Michael Bronstein 系列长文:迈向几何深度学习(之三)——第一个几何神经网络模型
- MogDB学习笔记-从0开始
- 5次折戟IPO,互联网家装这条路,没土巴兔想的那么简单
猜你喜欢
随机推荐
Group DETR:分组一对多匹配是加速DETR收敛的关键
分布式文件系统fastDFS
软件测试基础笔记
Fortinet new cloud native protection products launched amazon cloud platform of science and technology
openEuler 社区 2022 年 7 月运作报告
Will ODPS spark on Dataworks process data more efficiently than directly using ODPS SQL?
nyoj 712 探 寻 宝 藏(双线dp 第六届河南省程序设计大赛)
Dandelion R300A 4G router, remote monitoring PLC tutorial
Redis之SDS数据结构
Advanced CAD practice (2)
【761. 特殊的二进制序列】
智驾科技完成C1轮融资,此前2轮已融4.5亿元
重读GPDB 和 TiDB 论文引发的 HTAP 数据库再思考
01、前言
PG 之 huge page
卡通渲染的历史
PX4-做飞控二次开发需要知道的事情-Cxm
SSM项目整合——综合案例
APICloud AVM wraps date and time selection components
Redhat 7 Maria DB installation and configuration