hThread = CreateThread( NULL, 0, ThreadFunc, NULL, 0, &dwThreadId);
CloseHandle(hThread);
如上面这样的代码,原因为:创建线程后返回了线程句柄,新创建的线程内核对象的使用计数是2,一个是线程本身,一个是创建线程的线程,创建线程的线程closehandle后,新
的线程的内核对象使用计数为1,当这个新线程结束运行后内核对象的使用计数还要减1,这时内核对象的使用计数是0,则系统会自动删除新线程的内核对象,这是正常的处理流
程。
如果不调用CloseHandle();则新线程运行结束后,由于使用计数为1,所以不会删除线程内核对象,这样就会造成内存泄漏。当然在整个程序运行结束后,操作系统会回收这些内
存,因此可以知道如果不调用CloseHandle()的话,在程序运行阶段会造成内存泄漏!
本文探讨了在Windows环境下创建线程后的线程句柄管理问题。重点分析了使用CreateThread函数创建线程后,如果不及时关闭句柄将导致的内存泄漏问题。文章解释了线程内核对象的使用计数机制,并强调了正确调用CloseHandle的重要性。
1256

被折叠的 条评论
为什么被折叠?



