1. 程式人生 > >基於MFC的實時視覺化專案中檢視重新整理訊息的嚴謹使用

基於MFC的實時視覺化專案中檢視重新整理訊息的嚴謹使用

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

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

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