羽毛球

生活在别处

导航

<2005年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

留言簿(29)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

不要在线程之间共享GDI对象

今天翻侯捷译的《Win32多线程程序设计》时,忽然看到一句:不要在线程之间共享GDI对象。
好像脑袋里一点这方面的记忆都没有。对象包括GDI对象都是进程拥有,只要做好同步,不就行了。为什么不要呢?

翻到后面11章的解释:
GDI对象被每一个进程拥有,而被每一个线程锁定。如果一个线程正在使用一个GDI对象,它将被锁住,其他线程无法使用它。与其他windows资源不同,GDI对象的取用不是连续性的;线程不会排队等待一个忙碌的GDI对象,函数调用直接返回失败。如果一个线程删除一个DC,它就那么走了,即使有另一个线程正在使用它。

如果你使用自己自己的同步机制来保护它们,GDI对象就有可能被共享。然而,这样的机能没有在系统核心实现,因为它太没有效率了。


原来如此。细想一下,确实有理,GDI对象需要很即时的画图,着色,如果等待,那界面显示肯定很糟糕。

posted on 2005-06-08 21:04 Michael 阅读(2392) 评论(3)  编辑 收藏

评论

# re: 不要在线程之间共享GDI对象 2005-06-08 21:07 Michael

好像不能方便将随笔从一个分类移动到另一个分类?

# re: 不要在线程之间共享GDI对象 2005-06-08 22:37 pAnic

win3.1时代开始,包括DC在内的GDI资源就没有被设计成由某个进程/线程 独占。

# re: 不要在线程之间共享GDI对象 2005-06-09 10:22 boli

仔细想一想如果程序构思合理的话,应该不会有多线程共享 GDI 对象~ 显示和数据处理分开做嘛~ 同步数据就可以了~

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]