一个GDI资源泄漏的错误 记录下来 以后用的到
2010-07-30 16:14
211 查看
hge工程中使用到一个flash控件,作者是微妙的平衡。网上应该比较容易找的到。其中有一段这样的代码
voidFlashPlayer::RebuildBuffer() { CleanupBuffer(); HDCdesktop_dc=::GetDC(m_hWnd); if(m_desktop_dc==NULL) { return; } m_hFlashDC=::CreateCompatibleDC(m_desktop_dc); if(m_hFlashDC==NULL) { return; } ...... }
这段代码在运行时貌似有问题,当反复播放flash并长时间运行的花,就会出现GDI资源泄漏。
仔细看HDCdesktop_dc=::GetDC(m_hWnd);
这里用一个临时变量去::GetDC(m_hWnd);但是这个函数并没有RealseDC。因为这个desktop_dc可能在这个
函数执行完后还在使用,所以作者并没有立即清理掉这个dc。修改时只需要用一个成员变量保存该dc,并在适当的时候清理
掉就OK了。
下面是咨询一个牛人的聊天记录,呵呵。不算是自己改的。尊重别人劳动成果。。
HDCGetDC(
HWNDhWnd//handletowindow
);
使用这个函数可以获得hdc
AfterpaintingwithacommonDC,theReleaseDCfunctionmustbecalledtoreleasetheDC.
ClassandprivateDCsdonothavetobereleased.ReleaseDCmustbecalledfromthesamethreadthatcalledGetDC.
ThenumberofDCsislimitedonlybyavailablememory.
GetDC以后必须ReleaseDC;否则会引起程序崩溃。
相关文章推荐
- 记录一次MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
- 最近写了两个组件,一个是日期选择;一个是两个JList,双击其中一个的任一个Item,这个Item就会跑到另一个JList中去。这里记录下来,以便以后的修改。
- 在网上找的一个Flex文件上传代码,记录下来,以后用到的时候可以马上能用:
- 一个GDI资源泄漏检测程序
- java写循环,犯了一个小错误,记录下来以鞭策
- 最近无意中看到一个讲解spring mvc的系列,从源码的角度讲解,特记录下来,供以后反复学习
- 一辈子都难遇见的一个Exception啊,具体错误信息已经记录下来,忙过这段时间后就着手分析了
- javascript的一个简单语法,记录下来
- Qt : 记录一个编译错误
- 在虚拟机的XP中使用管道出现的问题,可能是一个BUG,先记录下来
- 记录一个低级错误
- 33. 百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入 流中随机取得m个记录
- 记录一下:不同资源文件重名导致程序取到错误的资源
- 程序中GDI资源占用与泄漏的初步分析
- 发现一个自己容易忽视的错误。空格+checkBOX 使用JS加载下来列表
- 错误提示之(MVC3.0):HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确 MVC误设起始页
- 在执行批处理时将执行错误的语句记录下来并写到日志文件中去
- cocos2d-x 学习过程错误记录--Xcode+cocos2d-x 3.3 资源文件存放位置
- 无意中发现一个js网站,先记录下来,有空再研究
- 写了一个SpringMVC 怎么封装到Map里!以后要多多利用这种方法,自己脑子笨就记下来了。