• 我的订阅
  • 科技

窗口销毁消息 WM_DESTROY 的正确处理方式

类别:科技 发布时间:2022-12-13 09:00:00 来源:漫漫开发路

上次,我提到了可能导致正常的消息循环被破坏的怪异之处。

有一位读者 Adrian 指出,WM_GETMINMAXINFO 消息在顶级窗口 WM_NCCREATE 之前到达。这确实很不幸,但(无论是否错误)十多年来一直如此,现在修改它会引入严重的兼容性风险。

但这不是我想到的怪异之处。

前段时间,我正在帮助调试一个使用 ListView 控件的程序的问题,该问题可追溯到 ListView 控件子类化的程序,并通过复杂的C++对象链,最终尝试销毁 ListView 控件,而它已经在销毁过程中。

让我们以新的例子程序为例,以一种更加明显的方式来说明我所提到的问题。

窗口销毁消息 WM_DESTROY 的正确处理方式

我在代码中添加了一些调试跟踪,以便更轻松地查看正在发生的事情。运行程序,然后关闭它,并观察会发生什么。

窗口销毁消息 WM_DESTROY 的正确处理方式

哎呀!发生了什么事?

当您单击窗口右上角的关闭按钮时,这将启动窗口销毁过程。正如预期的那样,窗口收到了一条 WM_DESTROY 消息,但程序通过尝试再次销毁窗口来响应此消息。请注意,IsWindow 报告此时该窗口仍然存在。这是真的:窗口仍然存在,尽管它恰好正在被破坏的过程中。在原始场景中,破坏窗口的代码类似于下面的代码:

if (IsWindow(hwndToDestroy))

{

DestroyWindow(hwndToDestroy);

}

无论如何,对 DestroyWindow 的递归调用导致一个新的窗口销毁周期开始,嵌套在第一个窗口内。这将生成一条新的 WM_DESTROY 消息,后跟一条 WM_NCDESTROY 消息。(请注意,此窗口现在已收到两条 WM_DESTROY 消息!然后,我们的代码对DestroyWindow 进行了另一个递归调用,从而开始了第三个窗口销毁周期。窗口获取其第三条 WM_DESTROY 消息,然后是第二条 WM_NCDESTROY 消息,此时返回对 DestroyWindow 的第二次递归调用。此时,窗口不再存在:DestroyWindow 已销毁窗口。

这就是程序崩溃的原因。基类通过销毁与窗口关联的实例变量来处理 WM_NCDESTROY 消息。因此,当最里面的 DestroyWindow 返回时,实例变量已被丢弃。然后,使用基类的 WM_NCDESTROY 处理程序恢复执行,该处理程序尝试访问实例变量并获取堆垃圾,然后使释放已释放的内存变得更糟,从而损坏堆。正是在这里,我们崩溃了,试图在已经破坏的对象上调用虚拟析构函数。

我有意选择使用新的例子程序(使用C++对象)而不是经典的例子程序(使用全局变量)来强调这样一个事实,即在递归 DestroyWindow 调用之后,所有实例变量都消失了,你正在已经释放的内存上运行代码,这很危险。

故事的寓意:了解你的窗口的生命周期,不要破坏一个你知道已经处于破坏过程中的窗口。

总结

在非托管平台上编写代码如履薄冰,你需要时时谨慎,因为,不再有人能暗中保护你了。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《When the normal window destruction messages are thrown for a loop》

窗口销毁消息 WM_DESTROY 的正确处理方式

返回搜狐,查看更多

责任编辑:

以上内容为资讯信息快照,由td.fyun.cc爬虫进行采集并收录,本站未对信息做任何修改,信息内容不代表本站立场。

快照生成时间:2022-12-14 22:16:36

本站信息快照查询为非营利公共服务,如有侵权请联系我们进行删除。

信息原文地址:

更多关于消息,方式,处理的资讯:
如何巧妙处理微信不回的问题?
...生活中不可或缺的沟通工具。然而,当我们在微信上发送消息却得不到回应时,往往会感到困扰和不安。如何聪明且有格局地处理这种情况,不仅体现了我们的情商和智慧,也展现了我们的成熟与大
2024-06-09 09:34:00
对象不回消息?别急,这里有解!
在现代社交的浪潮中,消息传递已成为我们日常沟通的主要方式。然而,当我们的对象突然不再回复消息时,心中难免会产生疑虑和不安。面对这种情况,我们应该如何应对呢?接下来,我将从多个维度
2024-07-10 14:17:00
应对“已读不回”时最高明的处理方式,无非这两种
...个世界上,最浅显易懂的答案。”你有过类似的经历吗?消息发出去很久,可迟迟等不到对方的回复;自己主动发送的消息数条,可对方连一个表情包都不愿意施舍。看似对方真的没有回复,但“已
2023-01-27 20:46:00
邮报:曼联员工对处理青木安东尼事件的方式很失望,可能选择离职
...。后来指控被撤销,格林伍德被租借到赫塔费。上个月有消息称,安东尼因涉嫌袭击前女友而正在接受警方调查。这名边锋最初被曼联给予了一段时间的全薪休假,但后来又回到了俱乐部,关于曼联
2023-10-12 03:03:00
了解这些特点,我们可以更好地处理人际关系,并减少冲突和误解
...活中必不可少的一部分。在微信中,有些人会对其他人的消息秒回,这说明他们可能拥有某些特定的脾气和习惯。那么,这些人的特点到底是什么呢?本文将根据作者的观察和经验,介绍四种喜欢秒
2023-07-05 21:10:00
情人不回消息了,聪明的女人,大多会用这几种方式撩他
在感情世界里,偶尔会遇到情人不回消息的情况,这可能会让人感到焦虑和无助。然而,聪明的女人,会用合适的方式去应对这种情况,以便于让关系升温。只要方式得当,不仅能够保持自己的尊严和独
2023-12-07 13:10:00
如何提高im服务的用户体验
...以下几个方面探讨如何提升IM服务的用户体验。一、提高消息传输速度和成功率消息传输速度和成功率是影响用户体验的重要因素。为了提高消息传输速度,可以采取以下措施:1.优化服务器架
2024-06-29 02:55:00
2023 年 MQTT 协议的 7 个技术趋势|描绘物联网的
...tone)Shi:EMQX欧洲研发中心负责人,拥有多年大规模分布式MQTT消息系统开发经验,致力于与EMQ斯德哥尔摩研发团队一起将EMQX打造成为全球最优秀的MQTTbroker
2023-04-18 16:28:00
郭帆被冒充!《流浪地球3》发布辟谣声明:朋友圈临时演员招募系假消息
快科技5月1日消息,近日,电影《流浪地球3》剧组(下称“剧组”)发现有第三方机构或个人冒用郭帆导演、剧组合作方等身份,通过社交平台自媒体账号对外发布“临时演员招募通知”、“投资方
2025-05-01 12:37:00
更多关于科技的资讯:
人工智能如何赋能“安徽万物”?
大皖新闻讯 1月16日,《安徽省“人工智能+万物”应用行动方案》发布,到2030年,安徽“人工智能+万物”应用落地将超万个
2026-01-17 21:56:00
鲁网1月17日讯1月13日上午,普惠(临沂)投资服务有限公司考察组一行赴临沂市供应链金融协会开展学习交流活动。临沂市供应链金融协会会长
2026-01-17 14:47:00
1月16日,全球最大、起重量达2300吨的桥面吊机在河北省秦皇岛市一装备制造企业正式下线,标志着我国在大型桥梁施工装备领域又获重大突破
2026-01-17 15:44:00
2026天然苏打水市场趋势:健康化、场景化成主流 泉匠深耕多区域市场实现销量突破
随着健康消费理念的深度渗透,天然苏打水行业正迎来高质量发展的黄金期。据行业权威报告预测,2026年中国天然苏打水市场规模将突破260亿元
2026-01-17 15:58:00
开元云与广西大学人工智能学院达成战略合作,共建AI产教融合新高地
广西大学人工智能学院常务副院长张振荣、副院长赵志刚、陈燕教授等老师,出席双方产学研合作签约仪式。2026年1月15日 广西南宁
2026-01-17 15:58:00
数据接口安全风险监测国标正式发布!深信服深度参编
根据2025年12月2日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2025年第33号)
2026-01-17 16:00:00
近日,国网潢川县供电公司依托用电信息采集系统及“专变负载可视化”数据集,构建反向有功异常自动监测告警机制,实现非光伏用户反向用电异常精准识别处置
2026-01-17 16:00:00
新消费|万物皆可租!这届年轻人为何“能租就不买”?
租一台口袋相机只需30元一天专业优质的画质却可以让旅途回忆更生动用百来元就能配齐一整套露营装备花100元便能轻松满足整趟出国旅行的穿搭需要……如今越来越多的年轻人正通过“租赁”重新定义自己的消费方式近日
2026-01-17 16:54:00
冷暖省电双先锋!美的酷省电二代横扫抖音商城三榜冠军
2026刚开年,空调行业首款爆品已然出现——全新上市美的酷省电二代便凭硬核实力脱颖而出,强势斩获抖音商城智能空调爆款榜
2026-01-17 16:00:00
厦门钨业通过技术创新与人才创新,不断攻克行业技术难题,塑造发展新动能让“有色”更出色东南网1月17日讯 (福建日报记者 戴敏 李向娟)近日
2026-01-17 11:38:00
在漳州龙文区,智能机器人等一批前沿项目正在聚集,新质生产力蓬勃生长——“未来场景”来到家门口东南网1月17日讯 (福建日报报业集团记者 杨凌怡 通讯员 张小惠)广场前
2026-01-17 11:41:00
中国姚绣站上巴黎大展C位
1月15日至19日,非遗苏绣品牌姚绣(Yao Silk)再度亮相巴黎M&O展,成为本届展会Fine Craft(精品工艺)展区唯一中国品牌
2026-01-17 09:40:00
民大学子全国“摘金” AI巧解垃圾分类与楼宇管理难题
荆楚网(湖北日报网)讯(记者林杉 许文秀 通讯员陈韶月 张祎晗)面对垃圾分类的效率瓶颈,人工智能与机械设计如何给出更优解
2026-01-17 10:36:00
长白时评评论员 久泰平近日多起滥用“七天无理由退货”的新闻引发社会关注。有商家曝光,有学生集体网购演出服,演出后再把带着污渍
2026-01-17 05:55:00
1月14日消息,工业和信息化部近日公布了2025年全国中小企业人工智能典型应用场景名单,晋西春雷自主研发的“AI视觉质检实现铜带缺陷精准识别”项目成功入选
2026-01-17 07:39:00