1. 程式人生 > 實用技巧 >【MFC學習】顯示DC不釋放導致出現異常

【MFC學習】顯示DC不釋放導致出現異常

在MFC中學習過程中遇到了一個問題,折騰了半天,才解決。記錄一下過程,以便後續查詢。


說一下場景,使用mfc進行,採用雙快取繪圖的方式,進行一組連續圖片的連續顯示,效果就是以一個picture control為顯示區域,圖片從picture control的右邊進入,從左邊出去,圖片都很大,比顯示區域大很多,所以達到了一個圖片從右向左的動態效果。這樣一組圖片有60多張,一張接一張的移動過去,就達到了連續動態的效果。其中圖片的移動的速度是可以控制的。


問題現象是開始連續播放的挺好,但是到了40多張的時候,報了個異常終止。把播放速度調快了之後能正常的播放結束。把播放速度調慢了之後20多張就報了異常,終止了。


看到這個結果後梳理程式碼,沒看出什麼問題。取不到getlasterror的資訊。debug的話也不好弄,開始以為是某一個位置出現了問題,就開始打點找這個位置。發現這個位置總是在變化,不固定。。。這下惆悵了。


後來問了一下其他的同事發現了問題的原因。


首先打開了工作管理員

wKioL1LVQAmRSugZAANDL_T_Bro846.jpg

看到了後面多了幾列,如控制代碼數,執行緒數,GDI物件,簡單說一下怎麼調出來這幾列

先點選“程序”這頁,再點選工具欄中的“檢視”,點選“選擇列”


在GDI物件數這一項裡會發現數字一直不斷的上漲,圖片移動的速度不一樣上漲的速度就不一樣。當數字達到了10000後,程式就出現異常終止了。


發現是沒有釋放GDI物件,回頭再排查一下getdc的地方,發現確實沒有釋放GDI。是對getdc的理解不正確,之前我以為getdc之後,等結束後再釋放了就行了。有多個圖片要處理,是一個迴圈處理,所以每畫一張影象就申請了很多個dc,卻沒有釋放,導致出現了這次的問題。


轉載於:https://blog.51cto.com/mingsuper/1351679