GetExitCodeThreadWaitForSingleObject

    技术2022-05-20  33

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


    最新回复(0)