第一点:
MSDN :
_endthread automatically closes the thread handle;
when you use _beginthreadex and _endthreadex, you must close the thread handle by calling the Win32 CloseHandle API.
这段话说 _endthread是自动删除线程句柄,而_beginthreadex 是需要在结束线程后手动关闭句柄
第二点:
当你使用 _endthread 或者 _endthreadex时 还需要注意的一点事 当使用完这个函数时 线程已退出 不会执行此函数后边的代码,可能造成内存泄露~
举个例子:
class Test
{
public:
Test()
{
std::cout<<"Test()"<<std::endl;
}
~Test()
{
std::cout<<"~Test()"<<std::endl;
}
};
unsigned int __stdcall ThreadFunc(LPVOID p)
{
Test t;
_endthreadex(0);//此代码执行后Test类的 析构函数和后边的 代码是都不执行的
int i =0;
i++;
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread = (HANDLE)_beginthreadex(NULL,0,ThreadFunc,NULL,0,NULL);
WaitForSingleObject(hThread,INFINITE);
return 0;
}
避免出现此问题的 办法是 不使用这个函数~

本文深入解析MSDN中关于线程句柄的关闭方式和使用_endthread/_endthreadex可能导致的内存泄露问题,提供避免方法。
2393

被折叠的 条评论
为什么被折叠?



