• 帮助
    • 博客
    • 相册
    • 网盘
    • 超市
    • Xer吧
  • 登录
  • 注册
【公告】关于网站取消无线业务的通告    【公告】个人空间首页新增“我的专辑”版块    【公告】X5dj广告过滤系统上线    【公告】关于调整网盘空间图片大小计算方法的通告    【公告】新功能“我的专辑”上线,珍藏属于你的美好回忆    【公告】X5dj网站网络硬盘用户使用协议    【公告】新增用户操作记录展示功能,帮助您更好的与朋友们互动    【公告】X5dj新功能汇总贴:新增“密码目录”功能上线    【公告】X5dj.com相册/网盘上传工具发布    
  • cydst的个人空间
  • http://www.x5dj.com/cydst 复制地址
  • 首页

  • 博客

  • 相册

  • 网盘

  • 人际关系网

  • 我的专辑

loading...
GetDC使用中容易忽视的bug < 上一篇 下一篇 > 有圣斗士 的网
GetDC使用中容易忽视的bug
cydst 发表于: 2007-08-31 14:14 来源:转载  X度:0  浏览:(260)  评论:(1)
收藏 | 复制地址 | [举报此文章] |  大 中 小 |  引用 删除 修改

GetDC使用中容易忽视的bug

written by Panic 2006/07/20

msdn中已经有详细说明:

The GetDC function retrieves a common, class, or private DC depending on the class style specified for the specified window. For common DCs, GetDC assigns default attributes to the DC each time it is retrieved. For class and private DCs, GetDC leaves the previously assigned attributes unchanged.

After painting with a common DC, the ReleaseDC function must be called to release the DC. Class and private DCs do not have to be released. The number of DCs is limited only by available memory.

关键是这一句:

After painting with a common DC, the ReleaseDC function must be called to release the DC.

但是由于GetDC直接返回一个指向CDC的指针(SDK中,返回的是一个HDC句柄),所以可以用这种形式的调用:

GetDC()->XXXXXX

但是这样一来,由于返回值没有保存,就无法进行ReleaseDC的调用了,由此会引起一个GDI资源泄漏。表现就是程序使用的GDI资源数量增加1。

在Win2k下,每个进程的可用GDI资源总数为10000,所以一般情况下这种泄漏不会引起什么实际的问题。但是,当程序需要频繁刷新,或者构造大量GDI对象的时候,就会面临GDI资源耗尽的问题。

GDI资源耗尽,导致的后果是无法创建新的GDI对象,但是在MFC中,GDI对象的构造函数不会因此而抛出异常(因为许多时候,实际的GDI对象不是在构造函数中建立的)。

由于GDI对象创建失败是很罕见的情况,而且失败了,也几乎没什么挽救手段,所以相当多的代码都不检测GDI对象创建是否成功。

以上这些同时存在于一个工程中的时候,就会引起一个难以觉察的bug,他的表现是GDI出现异常显示或者其他错误,直接原因是GDI对象创建失败,本质原因是没有对GetDC得到的返回值做ReleaseDC的调用,导致GDi资源耗尽。

也许其他的Get函数也有类似的问题。

虽然msdn说:The number of DCs is limited only by available memory.但是由于GDI资源总数的限制,这句话并没有实际意义。

我在msdn上没找到GDI对象总数限制的内容,10000个是我在win2kpro sp4上实测的结果。

 
系统分类:
标签:标个屁   
推送: 无分类 归类:专业

 
GetDC使用中容易忽视的bug < 上一篇 下一篇 > 有圣斗士 的网
用户回复
游客:yunyu97  发表于:2008-01-10 17:21  引用 删除 修改 (1楼)
MFC上的GetDC返回的是一个临时对象,在应用程序不忙的时候会自动销毁
 
首页 上一页 1 下一页 尾页 共 1 页
评分与快速回复

博主推荐
  • · 感谢同事们的关心
相关文章
  • ·flowplayer
  • ·在桌面中嵌入窗体
  • ·唐伯虎点秋香之对对联冠西版
  • ·二人转
  • ·感想
  • ·产品经理的责任
  • ·发不了光
  • ·讨城管檄
  • ·小兔兔
  • ·papervision3d camera
  • ·大医精诚
  • ·一些3D公式
  • ·五行的旺相休囚死和寄生十二宫
  • ·6爻用神
  • ·总***自动更新,今天回家度试这个
  • ·新成语:【正龙拍虎】
  • ·Flash Action Script 3
  • ·nsis 问题集锦
  • ·Amd 羿龙
  • ·移动窗口
博友热推
  • 我们国家的银行怎么都这个态度呀
  • 有人每天送自己上班是多么惬意啊
  • 原来不是光有真才实学就能成功的
  • 生活在我视野下呈现出与人的不同
  • 旧情人,让我们像亲人样彼此牵挂
  • 这才刚下了飞机,就感觉中了圈套
  • 不知怎么的,总是会有怀旧的感觉
  • 今年好多对情侣都没逃过七年之痒
  • 一直觉得埃及艳后这个女人很神秘
  • 茫茫人海中只想找个能对上眼的人
关于我们 | X5dj动态 | 加入我们 | 友情链接 | 官方日志 | 免责声明 | 举报不良信息
北京开创明天科技有限公司 版权所有 京ICP证040979号