线程退出的顺序问题

线程退出的顺序问题

在开发过程中经常遇到线程退出异常的情况。今天看到了一篇《线程句柄HANDLE与线程ID的关系》博客里面详细介绍了线程句柄与线程ID之间的关系以及线程退出的顺序等问题。特此记录一下有关线程退出的顺序问题。

线程退出的时候内核对象就会被激发, WaitForSingleObject()为堵塞函数,等待线程的内核对象被激发。所以终止线程并释放句柄对象的顺序是:TerminateThread()-->WaitForSingleObject()-->CloseHandle().

//线程、线程句柄、线程ID的生成和消失
hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwId);  //至此,新线程,线程句柄,线程ID产生
TerminateThread(hThread, 0);   //至此,线程ID,线程句柄都依然存在
WaitForSingleObject(hThread, INFINITE);  //至此,线程本身和线程ID消失
CloseHandle(hThread);  //至此,线程句柄消失

猜你喜欢

转载自blog.csdn.net/CXYLVCHF/article/details/111715571