關於HDC CDC的釋放

2021-07-03 04:59:38 字數 1236 閱讀 3973

首先:

hdc   hdc   =   getdc(hwnd); 

cdc   *pdc   =   cdc::fromhandle(hdc);

對於以上**,通過fromhandle得到的 cdc 不可以釋放. fromhandle 是通過 hdc 來建立了乙個 cdc 物件,以方便操作,釋放 dc 的操作應該針對於 hdc 而非此 cdc , 如果釋放了它   pdc->releasedc   ,就會造成隱患. 

這兩者是指向的乙個dc物件,只能釋放一次,而這個釋放應該針對 hdc 而非 pdc. 

然後:getdc和releasedc的呼叫配對,createdc和deletedc的呼叫配對。

getdc是從視窗獲取現有的dc,而createdc是建立dc,所以releasedc和deletedc的作用乙個是釋放,乙個是銷毀.

請教關於cdc資源釋放的問題。

m_holdbmp = selectobject( m_hmemdc, m_hbmp );  

cdc *pdc = new cdc;

if (!pdc)

pdc->attach(m_hmemdc);

//...使用pdc..**略

pdc->detach();

m_hbmp=(hbitmap) selectobject( m_hmemdc, m_holdbmp );

return true;

問題:1.請教如何釋放該cdc資源;

2.為什麼反覆new cdc後出錯呢?

------解決方案--------------------

1.請教如何釋放該cdc資源;

********************

對cdc來說,將與cdc相關的dc資源釋放掉,然後用delete將這個指標釋放掉

2.為什麼反覆new cdc後出錯呢?

==========

可能是申請太多,gdi資源已經不夠用了。 

------解決方案--------------------

這樣new cdc 的用法沒試過。通常在view類裡面 cdc*pdc = getdc(); 然後 releasedc(pdc); 或者在對話方塊裡面cpaintdc dc(this);或者使用cclientdc等。你是什麼專案?不是mfc專案嗎?感覺這樣反覆new cdc不怎麼合理似的。 

------解決方案--------------------

cdc獲取後一定要釋放,如果一直new而不delete就會記憶體不足而出錯

關於鎖的自動釋放

這種方案一直在用,但是一直沒能領會到它的意圖,也是在乙個面試過程中,被問到乙個此類問題,從而才想到的。問題 當在乙個函式中使用鎖時,如果加鎖後由於某種原因 疏忽,異常等 沒有釋放鎖就直接退出了,那麼將導致鎖的狀態錯誤,怎樣解決這個問題?1 沒有正常釋放鎖 就像下面的程式一樣 這裡僅作為示例,選用mu...

關於Jquery記憶體的釋放

專案進入尾聲,又是最恐怖的效能測試 對著js的效能測試我只能做這個表情 經過多次的 檢查和測試,確認已經把自己定的變數什麼的一大堆都已經用null處理,並且沒有明顯的迴圈引用,但結果進行使用者某一動作時,記憶體還是沒被全部 而是線性增加,最後發現,問題都是出現在dom身上 主要是太相信jquery的...

關於Jquery記憶體的釋放

專案進入尾聲,又是最恐怖的效能測試 對著js的效能測試我只能做這個表情 經過多次的 檢查和測試,確認已經把自己定的變數什麼的一大堆都已經用null處理,並且沒有明顯的迴圈引用,但結果進行使用者某一動作時,記憶體還是沒被全部 而是線性增加,最後發現,問題都是出現在dom身上 主要是太相信jquery的...