小步慢跑

 

gdi+ 播放gif 时的一个未捕获异常

  使用gdi+和之前写的 CTimerMgr 写了一个播放gif动画的小控件。原理就是使用gdi+解码gif,读出动画帧间隔,使用CTimerMgr 设置定时器。定时器超在新创建的线程中设置当前应该播放的帧(SelectActiveFrame()),并要求控件重绘(Invalidate())。

      使用中发现debug下output窗口总是输出 First-chance exception at 0x4aeee2e0 0x80000001: 尚未实现,但并不影响程序运行。后来发现问题就源自于在 定时器线程中调用了 GDI+ 的Image类的 SelectActiveFrame()。应该是 Image不是线程安全的类导致的。

      解决方案很简单,使用WM_Timer做定时器。其实从一开始的实现上就应该使用WM_TIMER,而不是定时器线程。当初使用定时器线程是怕UI线程中有耗时操作会导致gif卡。

但是定时器线程并不能解决这个问题,因为定时器线程仅仅是设置了应当绘制的下一帧,具体的绘制还是在UI线程中处理的。

posted on 2012-09-19 10:52 zaccheo 阅读(775) 评论(1)  编辑 收藏 引用 所属分类: win32/MFCgdi/gdi+

评论

# re: gdi+ 播放gif 时的一个未捕获异常 2015-03-28 16:18 王小亮

有点深度的,。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔分类(23)

随笔档案(26)

文章分类(1)

文章档案(1)

csdn

搜索

最新评论

阅读排行榜

评论排行榜