相对于之前的线程亲缘性主题相关的几篇文章,GDI 对象要简单得多。
作为一般规则,它们都具有进程相关性:创建它们的进程中的任何线程都可以使用它们。如果使用来自多个线程的 GDI 对象,则负责协调对象的使用。也就是说,你确实可以在主线程中创建 GDI 对象,然后在另一个线程中操作它,这没有任何问题,但需要自己做好线程同步,具体请看下面的说法。
要注意的是,窗口管理器和 GDI 对象通常保持其各自的对象线程安全。当我说协调来自多个线程的对象使用是你的责任时,我的意思是,如果你要从一个线程修改对象并在另一个线程上读取对象或从两个线程修改它,则必须在自己的线程之间进行协调。例如,如果一个线程枚举菜单,而另一个线程正在修改菜单,则执行枚举的线程将获得不一致的结果。同样,如果两个线程都尝试同时更改菜单项,则最后一个编写器将修改成功。
在下一篇文章中,我们将会讨论资源清理相关的问题。
总结
原则:主界面线程负责所有和用户界面相关的操作,工作线程,不到万不得已,仅做一些”脏活累活”。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Thread affinity of user interface objects, part 4: GDI objects and other notes on affinity》
领取专属 10元无门槛券
私享最新 技术干货