#c #windows #multithreading #exit
#c #Windows #многопоточность #выход
Вопрос:
Предположим, я создал несколько потоков. Теперь я также жду нескольких объектов, используя :
WaitOnMultipleObject(...);
Теперь, если я хочу знать статус всего кода возврата потока. Как это сделать?
Нужно ли мне выполнять цикл для всех дескрипторов потока в цикле.
GetExitCodeThread(
__in HANDLE hThread,
__out LPDWORD lpExitCode
);
И теперь проверьте lpExitCode
на наличие кода успеха / сбоя?
Приветствую, Сиддхартха
Ответ №1:
Если вы хотите дождаться завершения потока, просто дождитесь дескриптора потока. Как только ожидание завершится, вы можете получить код выхода для этого потока.
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, amp;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()
при его вызове для ожидания завершения следующего потока.
Ответ №2:
Нужно ли мне выполнять цикл для всех дескрипторов потока в цикле.
GetExitCodeThread( __in HANDLE hThread, __out LPDWORD lpExitCode );
ДА.