一个线程创建后如果设置了CREATE_SUSPENDED flag,但是由于其他原因需要退出,这个时候怎么办?比如:BOOL bError = FALSE;
DWORD dwThreadId = 0;
HANDLE hThread = ::CreateThread(NULL,0,WorkerThread,this,CREATE_SUSPENDED,&dwThreadId);
......
// 后续步骤,出现异常了
//这个时候由于其他步骤的异常需要终止此次的线程启动,我一般是这么做的:
if (bError)
::CloseHandle(hThread);
else
::ResumeThread(hThread);
return 0;这种情况下,那个线程函数出于什么状态?释放了没?还在内存挂着么?
DWORD dwThreadId = 0;
HANDLE hThread = ::CreateThread(NULL,0,WorkerThread,this,CREATE_SUSPENDED,&dwThreadId);
......
// 后续步骤,出现异常了
//这个时候由于其他步骤的异常需要终止此次的线程启动,我一般是这么做的:
if (bError)
::CloseHandle(hThread);
else
::ResumeThread(hThread);
return 0;这种情况下,那个线程函数出于什么状态?释放了没?还在内存挂着么?
MSDN的解释:
CREATE_SUSPENDED The thread is created in a suspended state and does not run until the ResumeThread function is called.
The thread can be run immediately after creation if the flag is not specified.就是说线程已经创建好了,只是处于挂起状态。和先创建就运行再Suspend的效果是一样的。
至于CloseHandle是和结束线程没有关系,你可以在线程结束前CloseHandle,这时只是释放了句柄资源,线程并未结束,还得自己结束。