创建线程后为什么马上调用CloseHandle()来关闭句柄
2013-08-02 15:58
253 查看
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()的话,在程序运行阶段会造成内存泄漏!
相关文章推荐
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- windows thread 是否有必要调用closehandle 关闭线程句柄
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 创建线程后为什么关闭了线程句柄,线程还是可以运行?
- 多线程,线程创建及关闭句柄存在的问题,终止线程的运行的几个函数
- 为什么CreateThread()调用创建线程时,系统设置线程内核对象的引用计数为1,在Create函数返回前是2
- 创建线程后马上CloseHandle(threadhandle)起什么作用
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- 创建线程后马上CloseHandle(threadhandle)起什么作用
- JAVA Runtime.addShutdownHook()方法{拿到线程句柄,在程序关闭之前调用释放资源}
- 创建线程后马上CloseHandle(threadhandle)的作用
- CloseHandle()函数(关闭线程句柄)的使用
- 不要在dll及ocx的CXXXApp::InitInstance中调用创建线程及关闭线程的操作
- CloseHandle()函数(关闭线程句柄)的使用