今天翻侯捷译的《Win32多线程程序设计》时,忽然看到一句:不要在线程之间共享GDI对象。
好像脑袋里一点这方面的记忆都没有。对象包括GDI对象都是进程拥有,只要做好同步,不就行了。为什么不要呢?
翻到后面11章的解释:
GDI对象被每一个进程拥有,而被每一个线程锁定。如果一个线程正在使用一个GDI对象,它将被锁住,其他线程无法使用它。与其他windows资源不同,GDI对象的取用不是连续性的;线程不会排队等待一个忙碌的GDI对象,函数调用直接返回失败。如果一个线程删除一个DC,它就那么走了,即使有另一个线程正在使用它。
如果你使用自己自己的同步机制来保护它们,GDI对象就有可能被共享。然而,这样的机能没有在系统核心实现,因为它太没有效率了。
原来如此。细想一下,确实有理,GDI对象需要很即时的画图,着色,如果等待,那界面显示肯定很糟糕。
--------------------next---------------------
阅读(194) | 评论(0) | 转发(0) |