#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);