hThread=CreateThread(NULL,0,FunProc,NULL,0,NULL);

CloseHandle(hThread);如上程序段,CreateThread创建了一个新的线程,为什么接下来一行立即关闭线程句柄,有点疑惑,查了一下好像是和内存泄漏有关,不过不是很清楚,哪位高手能通俗点解释下,谢谢!!

解决方案 »

  1.   

    这个CloseHandle不是结束线程,是使这个线程对象的使用计数-1。在孙鑫的视频里就有这个的讲解,更详细的了解,得看内核对象方面的东西
      

  2.   

    谢谢你,为什么要使用计数要-1啊,难道在调用CloseHandle之前使用计数为2吗?不是很清楚,讲明白点吧
      

  3.   

    CloseHandle不是结束线程,只是说你对这个句柄不感兴趣了(你之后不想用这个句柄做其他一些事)你就可以关闭了;
    创建线程的时候,起始计数为1
      

  4.   


    CreateThread创建线程之后,这个对象最初的使用计数确实为2
      

  5.   

    内核对象计数,标记了有多少线程正在使用这个内核对象,当这个计数器为0是系统会释放掉这个内核对象
    At   creation   time,   the   system   gives   each   object     
      an   initial   usage   count   of   1. 
      

  6.   

    Closing a thread handle does not terminate the associated thread.
    createthread创建线程,内核对象的引用计数是2,需要手动调用一次closehandle,引用计数减一,等线程结束后会再减一,减到0了,OS会释放掉这个内核对象。
    不过closehandle了后就不能再引用这个线程句柄了。具体细节参考windows核心编程
      

  7.   

    最开始的时候,给每个内核对象的初始计数是1
    只是在后来,调用CreateThread之后,计数又增加了1
    才成了2
      

  8.   

    我查了一下,《核心编程》里提到CreateProccess创建进程的时候是这样说的,开始是1,又变成了2。说线程内幕的时候又说CreateThread创建的线程内核对象“该对象最初的使用计数为2”。照理说,这个和那个进程的也应该是一个道理吧。但不管怎么说,正如2楼所说,这个地方确实是2了