创建线程后为什么马上调用CloseHandle()来关闭句柄
2015-06-10 19:19
260 查看
hThread = CreateThread( NULL, 0, ThreadFunc, NULL, 0, &dwThreadId);
CloseHandle(hThread);
如上面这样的代码,原因为:创建线程后返回了线程句柄,新创建的线程内核对象的使用计数是2,一个是线程本身,一个是创建线程的线程,创建线程的线程closehandle后,新的线程的内核对象使用计数为1,当这个新线程结束运行后内核对象的使用计数还要减1,这时内核对象的使用计数是0,则系统会自动删除新线程的内核对象,这是正常的处理流程。
如果不调用CloseHandle();则新线程运行结束后,由于使用计数为1,所以不会删除线程内核对象,这样就会造成内存泄漏。当然在整个程序运行结束后,操作系统会回收这些内存,因此可以知道如果不调用CloseHandle()的话,在程序运行阶段会造成内存泄漏!
CloseHandle(hThread);
如上面这样的代码,原因为:创建线程后返回了线程句柄,新创建的线程内核对象的使用计数是2,一个是线程本身,一个是创建线程的线程,创建线程的线程closehandle后,新的线程的内核对象使用计数为1,当这个新线程结束运行后内核对象的使用计数还要减1,这时内核对象的使用计数是0,则系统会自动删除新线程的内核对象,这是正常的处理流程。
如果不调用CloseHandle();则新线程运行结束后,由于使用计数为1,所以不会删除线程内核对象,这样就会造成内存泄漏。当然在整个程序运行结束后,操作系统会回收这些内存,因此可以知道如果不调用CloseHandle()的话,在程序运行阶段会造成内存泄漏!
相关文章推荐
- LeetCode Remove Linked List Elements
- View Controller 生命周期的各个方法的用法
- 自定义cell,添加uilable,并且给lable添加tap手势,不响应的问题,对应解决方法
- android studio 快速进行应用程序包名更换
- 个人IOCP服务器例子解说
- winxp计算机管理中服务详解
- P225 3
- STM32-USB详细使用说明(转)
- Java 递归算法
- “世界很美好,值得你为之奋斗”我只同意后半句。
- 360技术开发实习笔试题1-java
- Android消息系统(一)
- POJ 2485 最小生成树
- bzoj 1314: River过河 优先队列
- java web学习路线2
- USB设备请求和描述符(转)
- R语言学习
- IOCP 浅析与实例
- USB-HID简介(转)
- 认识自己——我所丧失的能力