【MFC学习】显示DC不释放导致出现异常
2014-01-14 22:15
323 查看
在MFC中学习过程中遇到了一个问题,折腾了半天,才解决。记录一下过程,以便后续查询。
说一下场景,使用mfc进行,采用双缓存绘图的方式,进行一组连续图片的连续显示,效果就是以一个picture control为显示区域,图片从picture control的右边进入,从左边出去,图片都很大,比显示区域大很多,所以达到了一个图片从右向左的动态效果。这样一组图片有60多张,一张接一张的移动过去,就达到了连续动态的效果。其中图片的移动的速度是可以控制的。
问题现象是开始连续播放的挺好,但是到了40多张的时候,报了个异常终止。把播放速度调快了之后能正常的播放结束。把播放速度调慢了之后20多张就报了异常,终止了。
看到这个结果后梳理代码,没看出什么问题。取不到getlasterror的信息。debug的话也不好弄,开始以为是某一个位置出现了问题,就开始打点找这个位置。发现这个位置总是在变化,不固定。。。这下惆怅了。
后来问了一下其他的同事发现了问题的原因。
首先打开了任务管理器
看到了后面多了几列,如句柄数,线程数,GDI对象,简单说一下怎么调出来这几列
先点击“进程”这页,再点击工具栏中的“查看”,点击“选择列”
在GDI对象数这一项里会发现数字一直不断的上涨,图片移动的速度不一样上涨的速度就不一样。当数字达到了10000后,程序就出现异常终止了。
发现是没有释放GDI对象,回头再排查一下getdc的地方,发现确实没有释放GDI。是对getdc的理解不正确,之前我以为getdc之后,等结束后再释放了就行了。有多个图片要处理,是一个循环处理,所以每画一张图像就申请了很多个dc,却没有释放,导致出现了这次的问题。
说一下场景,使用mfc进行,采用双缓存绘图的方式,进行一组连续图片的连续显示,效果就是以一个picture control为显示区域,图片从picture control的右边进入,从左边出去,图片都很大,比显示区域大很多,所以达到了一个图片从右向左的动态效果。这样一组图片有60多张,一张接一张的移动过去,就达到了连续动态的效果。其中图片的移动的速度是可以控制的。
问题现象是开始连续播放的挺好,但是到了40多张的时候,报了个异常终止。把播放速度调快了之后能正常的播放结束。把播放速度调慢了之后20多张就报了异常,终止了。
看到这个结果后梳理代码,没看出什么问题。取不到getlasterror的信息。debug的话也不好弄,开始以为是某一个位置出现了问题,就开始打点找这个位置。发现这个位置总是在变化,不固定。。。这下惆怅了。
后来问了一下其他的同事发现了问题的原因。
首先打开了任务管理器
看到了后面多了几列,如句柄数,线程数,GDI对象,简单说一下怎么调出来这几列
先点击“进程”这页,再点击工具栏中的“查看”,点击“选择列”
在GDI对象数这一项里会发现数字一直不断的上涨,图片移动的速度不一样上涨的速度就不一样。当数字达到了10000后,程序就出现异常终止了。
发现是没有释放GDI对象,回头再排查一下getdc的地方,发现确实没有释放GDI。是对getdc的理解不正确,之前我以为getdc之后,等结束后再释放了就行了。有多个图片要处理,是一个循环处理,所以每画一张图像就申请了很多个dc,却没有释放,导致出现了这次的问题。
相关文章推荐
- FFmpeg 学习之 解码并 MFC+OpenCV 显示
- MFC学习02--在应用类中定义一个字符串,在视图显示
- java线程持锁状态下出现异常会释放锁
- iphone toolbar.hidden=YES 导致后期压栈的界面出现异常的解决办法
- php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
- 解决IE11出现异常SCRIPT5011:不能执行已释放Script的代码
- 服务器因为其他原因打了系统补丁,导致.net2.0损坏,IIS以及运行.net2.0的程序出现异常
- struts 1.x 学习中遇见的异常:org.apache.struts.action.ActionServlet出现classNotFoundException
- F盘显示设备硬件出现致命错误,导致请求失败要怎样恢复资料
- android下载xml解析 文件尾出现NUL 导致解析异常的解决方法
- 在MFC中使用按下按钮出现选择文件对话框,选中一个指定文件,并将其地址显示到指定的编辑框中
- opencv学习-MFC打开摄像头显示图像
- mfc学习之win7任务栏显示进度
- php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
- 解决安卓加载长图出现解码失败导致显示空白的问题
- ActiveMQ 出现FixedBackOff 异常一直出现无限制的连接导致资源占用异常
- EF实体生成关系导致相互循环取数据出现异常"Self referencing loop detected for property "
- Win8.1下搜狗浏览器出现显示异常显示渲染错误的解决方法
- mfc _CrtIsValidHeapPointer(pUserData) 异常出现