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

Рекурсивный вызов array_filter выполнит эту работу; во внешнем вызове мы проверяем размер возвращаемого массива, чтобы решить, сохранять ли этот элемент или нет (это будет 0, если массив состоял исключительно из пустых массивов, как это происходит для 'christopher'):

Демо на 3v4l.org

15
задан Uhall 19 November 2008 в 05:17
поделиться

2 ответа

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
}
36
ответ дан 1 December 2019 в 00:50
поделиться

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

6
ответ дан 1 December 2019 в 00:50
поделиться