《Windows程序设计-第二版》第四章最后一个04Clock大例子中的GDI句柄泄漏问题
来源:互联网 发布:java软件工程简历模板 编辑:程序博客网 时间:2024/05/16 17:49
用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句柄数量不再随时间增加。
- 《Windows程序设计-第二版》第四章最后一个04Clock大例子中的GDI句柄泄漏问题
- gdi 句柄泄漏之坑
- windows程序设计 第九章 ENVIRON.C中的一个问题
- 《Linux程序设计第四版》读书笔记 - 第二章 Shell程序设计
- 第四章 查找记事本程序的窗口句柄 windows程序设计 王艳平版
- Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记
- 【问题】GDI泄漏
- C程序设计(第二版 新版)第四章 习题
- Lua程序设计第二版(笔记) 第四章语句
- 《Windows CE 程序设计》第四版
- 第四章 WINDOWS绘图程序设计
- Windows 程序设计 第四章 sysmets1
- Windows 程序设计 第四章 sysmets2
- Windows程序设计第四章总结
- 发一个《windows程序设计》里面的源程序第二章
- windows程序设计 第五章笔记 GDI(1)
- windows程序设计 GDI简介
- Windows程序设计-GDI图形
- OpenGL ES2.0 基本编程
- NSTimer 动画
- day 9 (frequency 5)
- PowerDesigner Name和Comment 互相转化问题
- 数据库版本自动检测升级
- 《Windows程序设计-第二版》第四章最后一个04Clock大例子中的GDI句柄泄漏问题
- 读 Beginning Android Games 2nd Edition (二十二) 封装OpenGL之GLGame类
- glBlendFunc
- vc 版本 宏 (zz.IS2120@BG57IV3)
- 如何低成本推广App?
- Android 日志系统logcat内核代码分析
- public.sh
- Extjs4.o的store结构类图详解
- Cocos2d坐标系统