【MFC學習】顯示DC不釋放導致出現異常
在MFC中學習過程中遇到了一個問題,折騰了半天,才解決。記錄一下過程,以便後續查詢。
說一下場景,使用mfc進行,採用雙快取繪圖的方式,進行一組連續圖片的連續顯示,效果就是以一個picture control為顯示區域,圖片從picture control的右邊進入,從左邊出去,圖片都很大,比顯示區域大很多,所以達到了一個圖片從右向左的動態效果。這樣一組圖片有60多張,一張接一張的移動過去,就達到了連續動態的效果。其中圖片的移動的速度是可以控制的。
問題現象是開始連續播放的挺好,但是到了40多張的時候,報了個異常終止。把播放速度調快了之後能正常的播放結束。把播放速度調慢了之後20多張就報了異常,終止了。
看到這個結果後梳理程式碼,沒看出什麼問題。取不到getlasterror的資訊。debug的話也不好弄,開始以為是某一個位置出現了問題,就開始打點找這個位置。發現這個位置總是在變化,不固定。。。這下惆悵了。
後來問了一下其他的同事發現了問題的原因。
首先打開了工作管理員
看到了後面多了幾列,如控制代碼數,執行緒數,GDI物件,簡單說一下怎麼調出來這幾列
先點選“程序”這頁,再點選工具欄中的“檢視”,點選“選擇列”
在GDI物件數這一項裡會發現數字一直不斷的上漲,圖片移動的速度不一樣上漲的速度就不一樣。當數字達到了10000後,程式就出現異常終止了。
發現是沒有釋放GDI物件,回頭再排查一下getdc的地方,發現確實沒有釋放GDI。是對getdc的理解不正確,之前我以為getdc之後,等結束後再釋放了就行了。有多個圖片要處理,是一個迴圈處理,所以每畫一張影象就申請了很多個dc,卻沒有釋放,導致出現了這次的問題。
轉載於:https://blog.51cto.com/mingsuper/1351679