Учитывая идентификатор потока, как решить, что он все еще работает или нет в Windows - PullRequest
1 голос
/ 14 ноября 2011

В Linux у нас есть pthread_kill () для этого.Я пытаюсь найти для него аналог Windows.

Другими словами, учитывая идентификатор потока, есть ли способ определить, работает ли поток по-прежнему или нет?) является самым близким, что я нашел, однако ему нужен дескриптор потока, а не идентификатор потока в качестве параметра.

Ответы [ 2 ]

6 голосов
/ 14 ноября 2011

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

Дескриптор не имеет этой проблемы: после завершения потока все дескрипторы этого потока будут отражать состояние завершения потока.

Вы можете получить дескриптор для потока с заданным идентификатором, используя OpenThread;затем вы можете передать этот дескриптор на GetExitCodeThread, чтобы определить, завершился ли поток.

2 голосов
/ 14 ноября 2011

Короче нет, нет. Вы можете определить, существует ли поток с данным идентификатором или нет. Однако вы принципиально не можете определить, что поток, на который вы ссылались, используя данный идентификатор, все еще работает или нет. Это связано с тем, что идентификатор потока будет переработан после его завершения.

Чтобы отслеживать время жизни потока, вам нужно получить дескриптор потока, который позволит вам поддерживать поток в течение столько времени, сколько вам нужно. Думайте об этом как о сильном VS. слабая ссылка вещь. Вы можете использовать OpenThread(), чтобы получить дескриптор потока по его идентификатору. Вы должны сделать это как можно скорее после получения идентификатора, а затем всегда использовать дескриптор потока.

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