main(){
 HANDLE hThread1;
 HANDLE hThread2;
 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
 hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
 CloseHandle(hThread1);
 CloseHandle(hThread2);
 Sleep(5000);
}
在创建线程后,就关闭了他的句柄,使他的引用计数减一。问题是:创建时引用计数是一吗?
关闭句柄后,计数为零。他不就退出了吗?后面不管Sleep多久,线程都不运行了。
我的想法肯定是错的,但不知错哪了?请赐教!!!!

解决方案 »

  1.   

    线程的HANDLE是内核对象,由Kernal32.dll来管理的.
    创建后即关闭线程的HANDLE确实使线程的HANDLE引用数下降到0,
    但线程还在运行,Kernal32不会强行杀死一个线程的,即使它的引用数降到0,所以不会退出.以上写法正确,楼主多虑了.
      

  2.   

    线程的handle是指向"线程核心对象", 而不是指向线程本身,当你调用CloseHandle()
    并给予它一个线程handle时,你只不过是表示,你希望自己
    和此核心对象不再有任何瓜葛,CloseHandle()唯一做的事情
    就是把引用计数减1, 如果该值变成0, 对象会自动被操作系统摧毁.CreateThread属进程所有,非线程所有当线程正在执行时候,线程对象处于未激发状态, 当线程结束时,
    线程对象被激发了.
      

  3.   

    调用CreateThread成功之后引用计数为2建议不要使用CreateThread而用_beginthreadex, 具体参见<windows核心编程>中的线程部分
      

  4.   

    我比较赞同blueriver1981(b.l.u.e.river) 的看法:
    调用CreateThread成功之后引用计数为2
    不知道对不对!!!!