《Windows程序设计-第二版》第四章最后一个04Clock大例子中的GDI句柄泄漏问题
2013-01-28 10:22
363 查看
![](http://img.my.csdn.net/uploads/201301/28/1359339544_1484.png)
用Sysinternals工具里的process explorer监控发现 GDI Handles在不断增加,大概是每秒增加2个。
检查原书代码:
case WM_TIMER: { // Èç¹û´°¿Ú´¦ÓÚ×îС»¯×´Ì¬¾ÍʲôҲ²»×ö if(::IsIconic(hWnd)) // IsIconicº¯ÊýÓÃÀ´Åжϴ°¿ÚÊÇ·ñ´¦ÓÚ×îС»¯×´Ì¬ return 0; // È¡µÃϵͳʱ¼ä SYSTEMTIME time; ::GetLocalTime(&time); // ½¨Á¢×ø±êϵ HDC hdc = ::GetDC(hWnd); SetIsotropic(hdc, s_cxClient, s_cyClient); // ÒÔCOLOR_3DFACEΪ±³¾°É«¾Í¿ÉÒÔ²Á³ýÖ¸ÕëÁË£¨ÒòΪ´°¿ÚµÄ±³¾°É«Ò²ÊÇCOLOR_3DFACE£© COLORREF crfColor = ::GetSysColor(COLOR_3DFACE); // Èç¹û·ÖÖӸıäµÄ»°¾Í²Á³ýʱÕëºÍ·ÖÕë if(time.wMinute != s_nPreMinute) { // ²Á³ýʱÕëºÍ·ÖÕë DrawHand(hdc, 200, 8, s_nPreHour*30 + s_nPreMinute/2, crfColor); DrawHand(hdc, 400, 6, s_nPreMinute*6, crfColor); s_nPreHour = time.wHour; s_nPreMinute = time.wMinute; } // Èç¹ûÃë¸Ä±äµÄ»°¾Í²Á³ýÃëÕ룬ȻºóÖØ»ËùÓÐÖ¸Õë if(time.wSecond != s_nPreSecond) { // ²Á³ýÃëÕë DrawHand(hdc, 400, 1, s_nPreSecond*6, crfColor); // ÖØ»ËùÓÐÖ¸Õë DrawHand(hdc, 400, 1, time.wSecond*6, RGB(0, 0, 0)); DrawHand(hdc, 200, 8, time.wHour*30 + time.wMinute/2, RGB(0, 0, 0)); DrawHand(hdc, 400, 6, time.wMinute*6, RGB(0, 0, 0)); s_nPreSecond = time.wSecond; } return 0; }
发现
case WM_TIMER:
消息处理中在取得HDC使用完毕后没有释放DC句柄,需要在
return 0;
语句之前添加释放hdc语句:
::ReleaseDC (hWnd, hdc);
Build后用Process Explorer再次检查发现GDI句柄数量不再随时间增加。
![](http://img.my.csdn.net/uploads/201301/28/1359340025_3295.png)
相关文章推荐
- Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记
- Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记
- 第四章 查找记事本程序的窗口句柄 windows程序设计 王艳平版
- Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记
- Windows 98 第二版的关机问题
- windows程序设计第四章 输出文字
- 【python】函数+windows下文件路径的\ / 问题(一个创建文件并过滤关键字的例子)
- socket句柄泄漏问题的定位: losf和strace的联合使用!
- .NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子
- javascript高级程序设计第三版 第四章 变量、作用域和内存问题
- windows程序设计之GDI简介
- windows程序设计中PlaySound的问题解答
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
- javascript高级程序设计第四章:变量、作用域和内存问题读书笔记
- 软件运行中界面显示异常——GDI资源泄漏问题的排查过程
- Windows 98 第二版的关机问题
- windows程序设计 第九章 ENVIRON.C中的一个问题
- 第四章 WINDOWS绘图程序设计
- 解决windows句柄不够用的问题
- GDI对象猛增,GDI资源泄漏的问题