文档章节

资源创建了用完后一定要释放

 四彩
发布于 2012/07/10 07:51
字数 240
阅读 234
收藏 0

这几天在尝试C语言用Win32 API写个小程序,有个函数是要在指定位置显示一串数字,为了图省事,把  CreateFontIndirect 放在 SelectObject 里了,代码是这样的:  

    SelectObject(hdc,  CreateFontIndirect(&logfont) );
    SetTextColor(hdc, RGB(0,0,0));
    SetBkMode(hdc, TRANSPARENT);
    DrawText(hdc, s, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);


开始运行没问题,可是在这个函数执行了142次后字体变成另外一种了。试了N次,很准确的是第142次突然变了。
琢磨琢磨后想到:是不是字体只创建没释放?
修改代码如下:

   HFONT f = CreateFontIndirect(&logfont);
   SelectObject(hdc, f);
    SetTextColor(hdc, c);
    SetBkMode(hdc, TRANSPARENT);
    DrawText(hdc, s, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    DeleteObject(f);

运行正常。


原来想的是这是个子函数,调用的时候创建字体,函数结束后会自动释放。
实际上函数结束并没有自动释放,所以在第142次调用后字体资源耗尽了。

© 著作权归作者所有

共有 人打赏支持
粉丝 25
博文 49
码字总数 77226
作品 0
茂名
关于数据库连接的关闭问题?

之前一直使用的模式是,当需要使用数据库操作的时候进行数据库连接,用完之后就立即关闭。 现在有个timer,每2000ms要进行一次数据库查询操作,程序一直运行,如果有多个客户端同时运行,也是...

影非弦
2015/04/27
302
1
Go连接MySql数据库too many connections错误解决

这几天用Go写了个简陋的服务器,连接Mysql数据库,提供api给其他程序调用来实现增删改产等服务。Go的版本是1.2,使用的驱动是go-sql-driver/mysql。但是在有一定量的查询结果以后,会出先too...

WAKnow
2014/03/06
0
4
Go连接MySql数据库too many connections

Go中连接数据库的连接池:当你需要和数据库通信时,就会从连接池里面取出一个连接,和数据库交互。使用完的闲置的连接会回到连接池,等待下一次的调用。如果连接池里面没有闲置的连接,会自动...

牛牛张
2015/06/05
0
0
为什么必须要使用CloseHandle关闭句柄

很多程序在创建线程都这样写的: ThreadHandle = CreateThread(NULL,0,.....); CloseHandel(ThreadHandle ); 1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚...

流云的博客
2015/05/16
0
0
请手动释放你的资源(Please release resources manually)

我从来不认为这个问题是个问题, 直到昨天. 昨天晚上的时候, 我提交了一个RFC, 关于引入finally到PHP, 实现这个功能的出发点很简单, 因为我看见不少人的需求, 另外还有就是Stas说, 一直只看到...

虫虫
2012/07/26
4.7K
24

没有更多内容

加载失败,请刷新页面

加载更多

线性一致性和 Raft

作者:沈泰宁 在讨论分布式系统时,共识算法(Consensus algorithm)和一致性(Consistency)通常是讨论热点,两者的联系很微妙,很容易搞混。一些常见的误解:使用了 Raft [0] 或者 paxos ...

TiDB
25分钟前
0
0
兄弟连区块链教程以太坊源码分析core-state-process源码分析

## StateTransition状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the cu......

兄弟连区块链入门教程
27分钟前
0
0
linear-gradient渐变中的参数

在看张鑫旭的博客 遇到渐变数值后面带参数不太理解 @supports (-webkit-mask: none) or (mask: none) { .box { border: none; background: linear-gradient(to bottom, #34538...

红羊在厦门
29分钟前
0
0
Python yagmail模块自动发邮件

Python发邮件yagmail模块 import yagmail#连接服务器yag=yagmail.SMTP('xx@163.com','yy','smtp.163.com')#邮箱正文contents=["test","email send"]#发送邮件#yag.send('...

小白兔_球球
29分钟前
1
0
pada mysql

CREATE SCHEMA `exchange` DEFAULT CHARACTER SET utf8mb4 ;

qwfys
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部