这是孙鑫视频教程15章“Chat”的一段代码在一个基本对话框工程的OnInitDialog()里面,插入了下面2行代码
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread);其中RecvProc函数的原型为
DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
{

return 0;
}我想问一下,这个线程被创建以后立即执行,跟着就“CloseHandle(hThread)”。
为什么要关闭线程句柄?关闭线程句柄以后,不会影响线程的执行吗?

解决方案 »

  1.   

    不要光看MFC的书,还要看看SDK的书籍,像《Windows核心编程》就对线程这里讲的很详细的当每个线程建立的时候,该线程的使用计数为2为什么是2? 因为当线程结束的时候使用计数会减1,这时使用计数为1,线程并没有完全关闭,主要是为了我们可以使用GetExitCodeThread()来得到线程的返回值(这个DWORD),一般都在这时关闭如果在线程建立的时候就关闭一个句柄(使用计数-1) ,说明我们并不关心该线程的返回值,当该线程运行结束后,所以就我们无法使用GetExitCodeThread() 来得到线程的返回值了
    总之一句话:
    当需要关心返回值的时候就在线程结束时关闭句柄;
    当不需要关心返回值的时候就在建立线程后马上关闭。
      

  2.   

    当线程内核对象中的 使用计数为0时,Windows才会撤消该线程的内核对象及线程资源。