基於MFC的實時可視化項目中視圖刷新消息的嚴謹使用

        在實時可視項目中,視圖的實時刷新顯示對軟件的體驗感來說非常重要,當算法的效率達到實時,比如一秒40幀,如果實時顯示幀率更不上,則體驗感將大大折扣,讓用戶感覺你的算法並沒有40幀,當然最關鍵的是解決顯示的效率問題。

        這裏最重要的解決思路當然是通過更高級的顯示策略提高顯示效率,拿OpenGL來說,可以採用VBO之類的更高效率顯示策略。

        但是這裏我想說的一個細節問題,即實時刷新消息的使用問題。在基於MFC開發的顯示程序中,顯示是一種消息隊列機制,我們一般是執行invalidate函數讓客戶區無效,當執行invalidate後,我們只是提交了一個希望刷新的命令放到了消息隊列,消息隊列裏的所有命令將按順序依次執行,除非你執行UpdateWindow強制刷新,但是不建議這麼做,在實時項目中頻繁調用強制刷新有可能造成界面卡住不動的情況,因爲UpdateWindow函數會繞過消息隊列,強制刷新,所以如果頻繁調用,其他刷新消息極有可能始終無法被執行,導致界面操作,如窗口拖動、大小變化等操作無法被有效執行,出現卡死現象。所以我們要謹慎使用invalidate函數,只有在真正需要刷新的時候才執行invalidate函數發送消息到消息隊列,即避免重複消息佔據消息隊列造成浪費,甚至堵塞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章