Если вы хотите дождаться завершения потока, просто дождитесь его дескриптора. По завершении ожидания вы можете получить код выхода для этого потока.
DWORD result = WaitForSingleObject( hThread, INFINITE);
if (result == WAIT_OBJECT_0) {
// the thread handle is signaled - the thread has terminated
DWORD exitcode;
BOOL rc = GetExitCodeThread( hThread, &exitcode);
if (!rc) {
// handle error from GetExitCodeThread()...
}
}
else {
// the thread handle is not signaled - the thread is still alive
}
Этот пример можно расширить до ожидания завершения нескольких потоков, передав массив дескрипторов потоков в WaitForMultipleObjects()
. Выясните, какой поток завершил, используя соответствующее смещение от WAIT_OBJECT_0
при возврате из WaitForMultipleObjects()
, и удалите этот дескриптор потока из массива дескрипторов, переданного в WaitForMultipleObjects()
, при вызове его для ожидания следующего завершения потока.