线程内核对象的释放问题

123 篇文章 1 订阅

       前两天开会,谈到最近开发的一些经验和心得,领到讲了一个最近压力测试发现的问题,我觉得比较有代表性,和大家分享一下。要求写一个服务端控制程序,去控制设备,然后用别人的客户端去控制服务端,协议是统一的,因此不会出现控制不上的问题,用压力测试工具长时间测试时,发现异常。经定位是内核对象句柄数超量的情况,导致程序蹦掉。查找了下关于句柄的操作和处理,发现原来是线程内核对象没有正常释放的问题,当我们_beginthreadex创建一个i线程的时候,系统为我们创建了一个线程内核对象,并且复制了一个句柄到我们的进程中,因此,调用完成之后,实际上该线程的内核对象计数器的值为2,当我们完成任务后,线程退出,这个时候计数器的值只是减1,因此,任务完成后,线程内核对象并没有被回收,因此,压力测试时,不断的开始,停止,导致资源泄漏,达到一定程序,程序就蹦了,因此,在停止时我们必须显示的调用CloseHandle减少计数器,以保证资源能正确释放。这样该问题就得到解决。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值