/** 等待给出的线程结束. */ void mvg::synch::joinThread(const TThreadHandle &threadHandle) { if (threadHandle.isClear()) return; int prio = GetThreadPriority((HANDLE)threadHandle.hThread); if (THREAD_PRIORITY_ERROR_RETURN == prio) return; // 这边表示这个不是一个正在运行的线程 DWORD ret = WaitForSingleObject((HANDLE)threadHandle.hThread, INFINITE); if (ret != WAIT_OBJECT_0) std::cerr << "[mvg::synch::joinThread] Error waiting for thread completion!" << std::endl; }
/*--------------------------------------------------------------- joinThread ---------------------------------------------------------------*/ void mrpt::system::joinThread( const TThreadHandle &threadHandle ) { if (threadHandle.isClear()) return; #ifdef MRPT_OS_WINDOWS int prio = GetThreadPriority((HANDLE) threadHandle.hThread); if (THREAD_PRIORITY_ERROR_RETURN==prio) return; // It seems this is not a running thread... DWORD ret = WaitForSingleObject( (HANDLE) threadHandle.hThread , INFINITE ); if (ret!=WAIT_OBJECT_0) cerr << "[mrpt::system::joinThread] Error waiting for thread completion!" << endl; #elif defined(MRPT_OS_APPLE) pthread_join(reinterpret_cast<pthread_t>(threadHandle.idThread), NULL); #else pthread_join(threadHandle.idThread, NULL); #endif }