您的位置:首页 > 其它

一个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(
HWND
hWnd//handletowindow
);

使用这个函数可以获得hdc

AfterpaintingwithacommonDC,theReleaseDCfunctionmustbecalledtoreleasetheDC.
ClassandprivateDCsdonothavetobereleased.ReleaseDCmustbecalledfromthesamethreadthatcalledGetDC.
ThenumberofDCsislimitedonlybyavailablememory.

GetDC以后必须ReleaseDC;否则会引起程序崩溃。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐