Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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
}

Ответ 2

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