VC++ _beginthreadex 句柄关闭问题

NDIS nui111 1097浏览 0评论

程序中使用_beginthreadex开辟新线程,一直以为线程结束之后会自己关闭句柄,直到一天自己查看任务管理器中的句柄数,程序中的句柄不断飙升,猛然意识到可能是自己使用错误。

 unsigned  __stdcall  TestThread(LPVOID pvParam)
 {
	 printf("end");
	 return 0;
 }


void testhandle()
{
	unsigned int dwThreadID = 0;
	HANDLE hSocket =(HANDLE)_beginthreadex(NULL, 0, TestThread, NULL, 0, &dwThreadID);
}  

参看msdn帮助:

谈 到Handle的问题,_beginthread的对应函数_endthread自动的调用了CloseHandle,而_beginthreadex的 对应函数_endthreadex则没有,所以CloseHandle无论如何都是要调用的不过_endthread可以帮你执行自己不必写,其他两种就 需要自己写!(Jeffrey   Richter强烈推荐尽量不用显式的终止函数,用自然退出的方式,自然退出当然就一定要自己写CloseHandle) 

以后直接这样好了

::CloseHandle((HANDLE)_beginthreadex(NULL, 0,threadRun_client,(void *)tp, 0, &runThreadID ));