1、今天向客户演示程序,不巧崩溃了。最后发现是使用了GetDC()后没有使用ReleaseDC()引起的。

2、最早听说GetDC()和ReleaseDC()是从前任带头码哥那里听说的,那时候仅仅用《VC 6.0 应用指南》《深入浅出MFC》

《从入门到精通》等书籍,最多就是有前卫人士从网上下载个代码、从别处拷贝个代码过来看看,从来没听说过msdn

尽管这样说,无奈我从来没有当真过。今天就被自己给碰到了。

3、网上查了查,还有人说的更玄虚:

A、::GetDC()和::ReleaseDC()配对不会产生资源泄漏;

B、GetDC()和ReleaseDC()配对可能会产生资源泄漏。

唉,宁可信其有,不可信其无啊!跟踪了一下,发现GetDC()还真不简单,还是::GetDC()简单。

4、查查msdn,相关例如以下描写叙述:

Note that the handle to the DC can only be used by a single thread at any one time.

After painting with a common DC, the ReleaseDC function must be called to release the DC. Class and private DCs do not have to be released. ReleaseDC must be called from the same thread that called GetDC. The number of DCs is limited only by available memory.


      首先是强调单线程使用。单线程内部配对调用GetDC和Release。DC的数量收可用内存的限制。

标记一下,以免忘记。唉,不看msdn的人那。

行规——::GetDC()和::ReleaseDC()配对的更多相关文章

  1. Windowsclient开发简单介绍(四)

            在上一篇文章里,我简单扼要的给大家介绍了一下GDI的基础知识,包含DC,HDC.GDI对象等等,总的来说都是些偏理论的知识,属于概念的范畴. 今天这篇文章里,我就要正式開始有点实际的东 ...

  2. 内存泄漏,当您使用的 GetDC 方法和 ReleaseDC 方法 CWnd 类版本

    重现行为的步骤 是从 CWnd 派生的类的一个方法中插入下面的代码在您的应用程序中: CDC *pDC; RECT rect; GetClientRect (&rect); for (int ...

  3. 告诉你GetDC()没有释放造成的后果

    最近做的项目中需要显示视频监控窗口,从采集卡中读到图像的数据,需要实时显示出来,而且速度比较快. 由于比较简单,就直接使用了GDI画图,以前复杂的都用openGL啥的工具了,这次这个简单,就直接用GD ...

  4. BeginPaint和GetDC有什么区别

    windows编程问题 第一种情况显示出来的字很正常. case WM_PAINT: gdc = BeginPaint (hwnd, &ps); TextOut (gdc, 0, 0, s, ...

  5. VC一些经验系列: 《分享泄漏检测工具:内存、DC、GDI、Handle... 》

    分享下自己工作中用到的一些用于泄漏检测的工具 后面的是DC的一些定义和注意事项.(不喜勿看) //=================================================== ...

  6. 关于 HDC 的释放

    GetDC和ReleaseDC的调用配对,CreateDC和DeleteDC的调用配对. GetDC是从窗口获取现有的DC,而CreateDC是创建DC,所以ReleaseDC和DeleteDC的作用 ...

  7. 【转】HDC,CDC,CWindowDC,CClientDC,CPaintDC等等

     转载出处:http://blog.sina.com.cn/s/blog_447611f20100lirt.html 首先说一下什么是DC(设备描述表) Windows应用程序通过为指定设备(屏幕,打 ...

  8. VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解:

    VC/MFC的HDC,CDC,CWindowDC,CClientDC,CPaintDC详解: 首先说一下什么是DC(设备描述表) 解:Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备 ...

  9. HDC与CDC相互转换

    转自loop_k原文 HDC与CDC相互转换 概念 首先说一下什么是DC(设备描述表):Windows应用程序通过为指定设备(屏幕,打印机等)创建一个设备描述表(Device Context, DC) ...

随机推荐

  1. iOS - GIF图的完美拆解、合成、显示

    转:http://blog.csdn.net/marujunyy/article/details/14455699 最近由于项目需要,需要先把gif图拆解开,然后在每一张图片上添加一些图片和文字,最后 ...

  2. 如何清除win7开机密码

    一.电脑已经登录到系统,但是忘记了密1对于这种情况是最简单的,其实只需要将密码取消就可以了右键单击桌面上我的电脑,选择管理即可进入计算机管理界面2依次展开系统工具--本地用户和组--用户,在右侧选择要 ...

  3. node.js study: cluster

    从v0.6.x开始,Node.js提供了多进程模块cluster,允许创建一组进程来共享同一个socket,并且分担负载压力.官方文档是这样说的:A single instance of Node.j ...

  4. Clang Language Extensions

    Xcode 本文是自<Clang Language Extensions> 中选取部分与 Objective-C 相关的内容翻译,由于作者水平有限,如存在理解错误或翻译不到位的地方,还请指 ...

  5. bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2818 [题意] 问(x,y)为质数的有序点对的数目. [思路一] 定义f[i]表示i之 ...

  6. android 拍照或者图库选择 压缩后 图片 上传

    通过拍照或者从相册里选择图片通过压缩并上传时很多应用的常用功能,记录一下实现过程 一:创建个临时文件夹用于保存压缩后需要上传的图片 /** * path:存放图片目录路径 */ private Str ...

  7. 搭建Titanium开发环境

    轻松制作 App 再也不是梦! Titanium Mobile 让你能够使用你所熟悉的 web 技术,制作出如同使用Objective-C 或 Java 写出的 Native App. 除了有多达三百 ...

  8. Spring+Quartz 整合二:调度管理与定时任务分离

    新的应用场景:很多时候,我们常常会遇到需要动态的添加或修改任务,而spring中所提供的定时任务组件却只能够通过修改xml中trigger的配置才能控制定时任务的时间以及任务的启用或停止,这在带给我们 ...

  9. JSP学习初体验

    JSP简介: 1)JSP--Java Server Pages 2)拥有servlet的特性与优点(本身就是一个servlet) 3)直接在HEML中内嵌JSP代码 4)JSP程序由JSP Engin ...

  10. JSF 2 password example

    In JSF, you can use the <h:inputSecret /> tag to render a HTML input of type="password&qu ...