麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

STM_SETIMAGE引起的gdi內(nèi)存泄露

2019-11-14 10:25:59
字體:
供稿:網(wǎng)友

STM_SETIMAGE引起的gdi內(nèi)存泄露

最近給程序加了一個動畫功能后,發(fā)現(xiàn)程序會引起及其嚴(yán)重的內(nèi)存泄露,找了半天發(fā)現(xiàn)是調(diào)用STM_SETIMAGE引起的。素以在此將使用STM_SETIMAGE遇到的問題記錄一下。 我的程序?qū)赢嫷乃袔崆凹虞d后用定時器循環(huán)用STM_SETIMAGE把位圖句柄發(fā)送到窗口顯示,發(fā)現(xiàn)沒顯示一次就泄露好幾M內(nèi)存,而且動畫切換的速度是很快的,所以不一會就開始bad_alloc了。 為什么每發(fā)送一次STM_SETIMAGE就泄露呢?查看msdn關(guān)于STM_SETIMAGE的說明,最后有一段描述,原文不貼了,翻譯過來大概就是這樣: 在xp下(xp以上應(yīng)該也是),如果顯示的位圖有非零的透明通道的像素(我自己翻譯的),控件就會復(fù)制一份位圖,這個復(fù)制的位圖的句柄將在下次調(diào)用STM_SETIMAGE時作為返回值返回,調(diào)用者有責(zé)任釋放這個位圖,不然就會內(nèi)存泄露。 解決方法: 我不知道微軟內(nèi)部用了怎樣的實現(xiàn)才會導(dǎo)致有這樣奇葩的使用方式,而且目前我也不知道怎樣判斷什么叫做“有非零的透明通道的像素”,所以只能通過判斷返回的句柄,如果創(chuàng)建static控件后第一次使用STM_SETIMAGE,會返回NULL,如果內(nèi)部沒有復(fù)制位圖,那么下次調(diào)用STM_SETIMAGE的返回值就是上次傳入的位圖句柄,如果內(nèi)部有復(fù)制位圖,那么下次調(diào)用STM_SETIMAGE的返回值就是static控件內(nèi)部創(chuàng)建的位圖句柄,需要用DeleteObject刪除位圖,釋放內(nèi)存。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色片在线播放 | 国产成年人网站 | 91,视频免费看 | 999精品国产 | 久久久国产精品免费观看 | 九九看片 | 天天干天天透 | 欧美成人一区免费视频 | 亚洲成人欧美 | 美女网站色免费 | 成人午夜激情网 | 久久国产28| 亚洲日韩中文字幕一区 | 免费一级a毛片在线播放视 日日草夜夜操 | 亚洲性综合网 | 欧美18videos性处按摩 | 国产九九 | 91色琪琪电影亚洲精品久久 | 国产一区二区三区四区五区加勒比 | 国产精品99久久久久久久女警 | 日本a级一区| 国产色视频在线观看免费 | 久久久久久久网站 | 高颜值美女啪啪 | 欧美日本91精品久久久久 | 国产精品高清一区 | 免费在线中文字幕 | 97精品国产高清在线看入口 | 国产亚洲精彩视频 | 欧美性受xxxxxx黑人xyx性爽 | 国产99久久久久久免费看农村 | 欧美一级黄色片在线观看 | 欧美视频国产精品 | 一级一级一级一级毛片 | 国产精品亚洲一区二区三区在线观看 | 国产成人在线看 | 欧美一区二区三区不卡免费观看 | 综合在线一区 | 在线成人免费网站 | 一区二区三区国产视频 | 亚洲日本高清 |