C语言中绘图时闪烁的问题

    这几天公司相关的设备软件要做新版本release的最后检测工作,大问题没有,但是出现了两个细节的问题:一个是在等待元件进入设备的时候整个屏幕呈现出了明显的低频闪动,另外一个问题是在元件检测的工程中屏幕内的某个区域出现了高频的快速刷新,重绘的循环过程,从而导致了高频闪动。这两个问题其实并不算逻辑性的bug,只是会造成一些视觉上的不适(设备是自动化检测设备,其实也不需要操作员实时的在产线上)。但是这恰恰戳中了我刨根问底的那股劲儿,我决定对代码做一次review,找到问题的根源。

    认真分析了代码,我发现了同事在合并一些新功能代码的时候,忽略了一些细节:

    首先是在设备waiting的阶段,为了更新一些实时的数据,同事在某个循环中加入了如下的语句

    解决思路:(1)当然就是去除冗余的uptdatewindow的代码(2)不得不在循环中使用updatewindow的时候,注意添加一些判定条件,当页面有更新信息的时候再进行update。我采用了后者,哈哈,解决了一个问题。

解决了第一个后再次分析代码,发现了第二个问题发生的原因:同样是发生在一个循环中。这次采用的是TextOut函数,只重绘一小块区域。大致的代码大意如下:

    讨论之后,我们的解决方案比较直接,在不影响运行速度的情况下加了10ms的延时,发现闪烁消失,更奇怪的是程序运行的效率得到了一定幅度的提升。也是意想不到的收获。

    这次问题的修改得到了新的一些启示: 
      (1)善用延迟。短延时有的时候对于程序的运行不一定是负担,合理的设计反而可能提高效率。
      (2)慎用绘图。对于底层设计者而言,时不时的画面进行绘制操作是必不可少的,但是更要注意绘图代码所处的位置,以及重绘的逻辑。否则造成界面的不友好是一方面,如果影响了代码运行的效率的话,那就真的是“化蛇添足”了。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113268 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年2月6日
下一篇 2017年2月6日

相关推荐