Выходной код потока в Windows C ++ - PullRequest
2 голосов
/ 24 мая 2011

Предположим, я создал несколько тем.Теперь я также жду нескольких объектов, используя:

WaitOnMultipleObject(...);

Теперь, если я хочу узнать статус кода возврата всего потока.Как это сделать?

Нужно ли выполнять цикл для всех дескрипторов потока в цикле.

 GetExitCodeThread(
  __in   HANDLE hThread,
  __out  LPDWORD lpExitCode
);

А теперь проверьте lpExitCode на наличие кода успеха / ошибки?

Приветствия, Сиддхартха

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Нужно ли выполнять цикл для всех дескрипторов потока в цикле.

 GetExitCodeThread(
  __in   HANDLE hThread,
  __out  LPDWORD lpExitCode
);

Да.

2 голосов
/ 24 мая 2011

Если вы хотите дождаться завершения потока, просто дождитесь его дескриптора. По завершении ожидания вы можете получить код выхода для этого потока.

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(), при вызове его для ожидания следующего завершения потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...