解决方案 »

  1.   

    CloseHandle是为了减少引用计数,释放句柄,不然会占用系统资源
      

  2.   

    看MSDN描述么。如果以确定以后不会再用到这个句柄了,马上CloseHandle是正确的做法。如果以后还要用到,那最终也还是要CloseHandle的。
    CloseHandle是减少引用计数,CreateThread创建的线程,其内核对象初始引用计数是2,调用CloseHandle减少1次,线程结束时再减少1次,引用计数减少到0时OS才会销毁这个内核对象。MSDN上这些应该都有,windows核心编程上也有,具体细节都可以看看。
      

  3.   


    令人满意的回答,谢谢~
    ---------------------------------------------------------
    既然提到了MSDN,我想再向大侠请教一下MSDN的使用方法:
    我平时也查MSDN,不过一般都是用来查API、查MFC、STL我知道浩瀚的MSDN包含更多windows细节功能描述,远不是简单的查查API这么简单,像大侠描述的
    “CloseHandle是减少引用计数,CreateThread创建的线程,其内核对象初始引用计数是2,调用CloseHandle减少1次,线程结束时再减少1次,引用计数减少到0时OS才会销毁这个内核对象”
    这么高大上的知识点要怎么从MSDN里面get呢?如果打开MSDN的“目录”来查找,感觉左边的标题又太大太宽泛,不知道何从下手
      

  4.   

    查CloseHandle这个API,看下面的res,里面有这么一段
    CloseHandle invalidates the specified object handle, decrements the object's handle count, and performs object retention checks. After the last handle to an object is closed, the object is removed from the system.Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.
    CreateThread线程对象引用计数初始为2的那个,是windows核心编程上的,我以为MSDN上也有看来我记错了。MSDN说实在的我也不太会用,平时也只是用来查找下API
      

  5.   

    查MSDN是Windows程序员必须掌握的技能之一。
      

  6.   

    肯定地回答楼主,这线程不会被杀死,因为你的线程函数没有退出来。不过像楼主这样的做法我还没式过。如果想要杀线程可以使用TerminateThread
      

  7.   


    感觉MSDN层次比较深啊,how to
      

  8.   


    HANDLE hThread = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
    CloseHandle(hThread);这个我补充一点儿。
    我的理解是这样的:
    在调用CloseHandle(hThread)前,hThread这个句柄和CreateThread返回的线程ID都是标识创建的这个线程的,既使这个线程已经结束了。也就是说,在调用CloseHandle(hThread)前,调用GetExitCodeThread、WaitForSingleObject等API都是有效的。
    如果调用CloseHandle(hThread)后,再调用GetExitCodeThread、WaitForSingleObject这些API,得到的结果就可能不是有效的,因为可能这个线程结束了,这个hThread被分配到了其他线程,得到的信息就是其他线程的信息。
      

  9.   


    不明觉厉,根据“zhousitiaoda”大侠的提示我查了下资料,CloseHandle以后就是系统放弃了对这个线程的操作,我理解就是线程被系统“遗弃”以后就自生自灭了,运行完成后自然退出或者跟着进程一块被销毁。
      

  10.   


    大侠你牌子很多,应该就是传说中的高手了;能否分享一下MSDN使用心得?
      

  11.   


    大侠你牌子很多,应该就是传说中的高手了;能否分享一下MSDN使用心得?
    搜索
    定位
    添加到收藏夹
      

  12.   

    线程对象和线程执行体是不同的东西,Closehandle的作用是减少线程对象的计数。即便你不断CloseHanlde使引用计数为0,线程执行体也不会被关闭。即便线程执行结束了,线程对象也不一定被销毁。只有当线程结束执行且线程对象的引用数为0时,线程对象才会被销毁