创建一个线程就会创建相应的核心对象,其中核心对象的计数器为1
使用closehandle 会使计数器减1那为什么下面程序在创建线程后 马上用closehandle关闭 ,却没有被销毁#include <windows.h>
#include <iostream.h>DWORD WINAPI Fun1Proc(
  LPVOID lpParameter   // thread data
);
int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
         //创建了线程,,同时使核心对象计数器为1
CloseHandle(hThread1);  
        //关闭句柄 计数器-1 :为0 //计数器为0了应该销毁线程了
       // 为什么线程还能运行 while(index++<1000)
cout<<"1"<<endl;}DWORD WINAPI Fun1Proc(
  LPVOID lpParameter  
)
{
while(index++<1000)
cout<<"2"<<endl;;
}

解决方案 »

  1.   

    msdn写得很清楚:Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, and then close all handles to the thread.不会结束线程
      

  2.   

    其实在你执行后 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);线程的内核对象的计数器为2 (为什么是2 可参看《windows 核心编程》这本书,里面讲得很清楚)