#if defined(WIN32)
DWORD exitCode;
while (true)
{
if (GetExitCodeThread(mThread,&exitCode) != 0)
{
if (exitCode != STILL_ACTIVE)
{
break;
}
else
{
WaitForSingleObject(mThread,INFINITE);
}
}
else
{
// log something here
break;
}
}
// !kh!
CloseHandle(mThread);
mThread=0;
#else
void* stat;
if (mId != pthread_self())
{
int r = pthread_join( mId , &stat );
if ( r != 0 )
{
WarningLog( << "Internal error: pthread_join() returned " << r );
assert(0);
// TODO
}
}
#endif
线程的生命期 1.用CreateThread函数建立新线程 并返回新线程句柄 HANDLE hNewTh; 2.新线程开始处理,线程结束时 调用ExitThread函数. 以上两步就是线程的基本过程,如果建立线程后,有两种结束情况需要注意 1. 需要知道线程的退出代码,则一般用 WaitForSingleObject(mVoiceManager.hThrd,INFINITE); 等待线程结束,并调用 GetExitCodeThread(hThrd,&m) 获取线程退出代码. 2.线程在程序存在期间一直运行,比如socket通信程序,要在主程序结束时通知 线程结束 并用函数WaitForSingleObject(mVoiceManager.hThrd,INFINITE); 等待 不管那种情况结束,线程结束后,要关闭线程句柄 CloseHandle(hNewTh);