Код выхода из потока в Windows C

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

ДА.