您的位置:首页 > 其它

线程内核对象的释放问题

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