基于MFC的实时可视化项目中视图刷新消息的严谨使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rs_lys/article/details/54630240

        在实时可视项目中,视图的实时刷新显示对软件的体验感来说非常重要,当算法的效率达到实时,比如一秒40帧,如果实时显示帧率更不上,则体验感将大大折扣,让用户感觉你的算法并没有40帧,当然最关键的是解决显示的效率问题。

        这里最重要的解决思路当然是通过更高级的显示策略提高显示效率,拿OpenGL来说,可以采用VBO之类的更高效率显示策略。

        但是这里我想说的一个细节问题,即实时刷新消息的使用问题。在基于MFC开发的显示程序中,显示是一种消息队列机制,我们一般是执行invalidate函数让客户区无效,当执行invalidate后,我们只是提交了一个希望刷新的命令放到了消息队列,消息队列里的所有命令将按顺序依次执行,除非你执行UpdateWindow强制刷新,但是不建议这么做,在实时项目中频繁调用强制刷新有可能造成界面卡住不动的情况,因为UpdateWindow函数会绕过消息队列,强制刷新,所以如果频繁调用,其他刷新消息极有可能始终无法被执行,导致界面操作,如窗口拖动、大小变化等操作无法被有效执行,出现卡死现象。所以我们要谨慎使用invalidate函数,只有在真正需要刷新的时候才执行invalidate函数发送消息到消息队列,即避免重复消息占据消息队列造成浪费,甚至堵塞。

猜你喜欢

转载自blog.csdn.net/rs_lys/article/details/54630240