Как я могу определить, завершился ли поток Win32? - PullRequest
15 голосов
/ 19 ноября 2008

Как определить, завершился ли поток Win32?

Документация для GetExitCodeThread предупреждает о том, что не следует использовать его по этой причине, поскольку код ошибки STILL_ACTIVE может быть возвращен по другим причинам.

Спасибо за помощь! :)

Ответы [ 2 ]

36 голосов
/ 19 ноября 2008

MSDN упоминает, что «Когда поток завершается, объект потока достигает сигнального состояния, удовлетворяя любые потоки, которые ожидали на объекте».

Итак, вы можете проверить, завершился ли поток, проверив состояние дескриптора потока - независимо от того, сигнализирован он или нет:

DWORD result = WaitForSingleObject( hThread, 0);

if (result == WAIT_OBJECT_0) {
    // the thread handle is signaled - the thread has terminated
}
else {
    // the thread handle is not signaled - the thread is still alive
}
6 голосов
/ 19 ноября 2008

Документация, на которую вы ссылаетесь, предостерегает от использования STILL_ACTIVE в качестве кода возврата, поскольку его нельзя отличить от возвращаемого значения, используемого для обозначения активного потока. Так что не используйте его как возвращаемое значение, и у вас не возникнет этой проблемы.

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