CloseHandle()和ExitThread()区别(防止内存泄露)

时间:2023-02-04 18:29:49

        //原文转自博客园:http://www.blogjava.net/JAVA-HE/archive/2009/06/16/282631.html

       CloseHandle的功能是关闭一个打开的对象句柄,该对象句柄可以是线程句柄,也可以是进程、信号量等其他内核对象的句柄,而ExitThread的功能是终止一个线程,它所接受的参数是一个线程的退出码。

       通过调用CloseHandle可以告知系统,已经完成了对某一内核对象的操作,该函数首先检查调用进程的句柄表,来确认进程是否对该句柄所指向的对象有访问权,如果句柄无效则返回FALSE,如果有效,系统将得到该内核对象的数据结构的地址,把结构中的使用计数成员减1,如果计数变为0,则将从内核中释放该内核对象。

       如果计数还未到0,就意味着还有其他的进程在使用这个内核对象,那么它就不会被释放。

       ExitThread是推荐使用的结束一个线程的方法,当调用该函数时,当前线程的栈被释放,然后线程终止,相对于TerminateThread函数来说,这样做能够更好地完成附加在该线程上的DLL的清除工作。(ExitThread只能终止自己

,而Terminate函数可以终止任何线程。)


       其实可以通过这个来避免c++里面的内存泄露.

      http://blog.csdn.net/anye3000/article/details/7470674有更加详细的介绍。

      个人思考:在本线程中直接return 0 ;岂不是很轻松吗?呵呵!如果其他线程要访问本线程的堆栈那么就用TerminateThread来终止.实在是不知道ExitThread和return 0 相比好在哪。 如果用了ExitThread(0)我想应该就不再需要CloseHandle了。这难道是唯一的方便之处??