用户界面对象的线程亲缘性第一篇: 窗口

2023-06-01 0 747

原副标题:界面第一类的缓存亲源性首篇: 询问处

相同的第一类具备相同的缓存亲源性准则,但其基本原则来自有名的 16 位 Windows。

在 Windows 控制系统上,最重要的界面第一类当然是询问处了。询问处对象有它自己的缓存亲源性。建立询问处的缓存是与询问处具备组成部分关系的缓存。非官方蔡伯介,缓存”保有”它所建立的询问处。最新消息仅在保有它的缓存上运维到询问处操作过程,一般来说,对询问处的修正应仅从保有它的缓存展开。

尽管窗口命令行容许任何人缓存出访询问处特性、式样和其它特性(如询问处操作过程),并且从询问处命令行的视角来看,这类出访是缓存安全可靠的,但读取-修正-载入字符串通常应管制为询问处的拥有者缓存。不然,你会碰到如下表所示图右图的市场竞争条件。

用户界面对象的线程亲缘性第一篇: 窗口

如果从任何人缓存不留神修正询问处操作过程,则在前首尾之间,第三个缓存可能会更动询问处的询问处操作过程,从而导致 newWndProc 将严重错误的”上两个”询问处操作过程传达给 CallWindowProc。

那么,为什么 Windows 甚至容许非拥有者缓存首先更动询问处操作过程呢?

即使,不可否认,16 位 Windows 是两个协同式虚拟化控制系统,这意味著两个缓存可以安全可靠地做任何人它想做的事情,即使知道没有其它缓存会受阻它,直到它明确舍弃对CPU的控制。因此,上述标识符在 16 位 Windows 中是安全可靠的。所致相容性原因,标识符仍然是不合法的,即使它不再安全可靠。

(但是请注意,为了管制安全可靠风险的影响范围,询问处命令行只容许保有询问处的民主化中的缓存更动询问处操作过程。这是两个科学合理的管制,即使原则上的门牌号空间意味著其它民主化中的表达式门牌号在保有询问处的民主化中无关紧要。)

归纳

在 流形安德森睿智办公设备网络平台 (Topomel Box) 的开发中,我仍旧固守的两个代码准则是:仅在主缓存中展开界面有关的修正,绝不能在工作缓存中做这种事,大部份的修正要求都通过 Windows 最新消息来通告主缓存。

对我来说,这是两个很管用的准则,一是它是简约而不必思考的(大部份的情况都直接指涉这一准则,无须苦恼),而是这首诗中所提及的缓存亲源性准则。

最后

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

本文来自:《Thread affinity of user interface objects, part 1: Window handles》

用户界面对象的线程亲缘性第一篇: 窗口

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务