Skip to main content

 路由器设置 > 新闻资讯 >

MFC学习:显示DC不释放导致出现异常

2014-01-14 23:49 浏览:

在MFC中学习过程中遇到了一个问题,折腾了半天,才解决。记录一下过程,以便后续查询。说一下场景,使用mfc进行,采用双缓存绘图的方式,进行一组连续图片的连续显示,效果就是以一个picture control为显示区域,图片从picture control的右边进入,从左边出去,图片都很大,比显示区域大很多,所以达到了一个图片从右向左的动态效果。这样一组图片有60多张,一张接一张的移动过去,就达到了连续动态的效果。其中图片的移动的速度是可以控制的。

 

问题现象是开始连续播放的挺好,但是到了40多张的时候,报了个异常终止。把播放速度调快了之后能正常的播放结束。把播放速度调慢了之后20多张就报了异常,终止了。看到这个结果后梳理代码,没看出什么问题。取不到getlasterror的信息。debug的话也不好弄,开始以为是某一个位置出现了问题,就开始打点找这个位置。发现这个位置总是在变化,不固定。这下惆怅了。后来问了一下其他的同事发现了问题的原因。

 

打开了任务管理器,看到了后面多了几列,如句柄数,线程数,GDI对象,简单说一下怎么调出来这几列先点击“进程”这页,再点击工具栏中的“查看”,点击“选择列”,在GDI对象数这一项里会发现数字一直不断的上涨,图片移动的速度不一样上涨的速度就不一样。当数字达到了10000后,程序就出现异常终止了。

 

发现是没有释放GDI对象,回头再排查一下getdc的地方,发现确实没有释放GDI。是对getdc的理解不正确,之前我以为getdc之后,等结束后再释放了就行了。有多个图片要处理,是一个循环处理,所以每画一张图像就申请了很多个dc,却没有释放,导致出现了这次的问题。