Проверьте, работает ли поток - PullRequest
0 голосов
/ 17 февраля 2011

Когда я объявляю РУЧКУ

HANDLE hThread;

Я проверяю, запущен ли поток,

  if (WaitForSingleObject(hThread, 0) == WAIT_OBJECT)
  {
       //Thread is not running.
  }
  else
  {
       hThread = CreateThread(......)
  }

Но в первый раз не удается проверить, работает ли поток. Как это можно сделать? Я думаю, что единственное, что мне нужно, это установить hThread в сигнальное состояние.

Редактировать

Я нашел что-то подобное

hThread = CreateEvent(0, 0, 1, 0); //sets to handle to signaled

Согласны ли вы с этим?

Ответы [ 3 ]

4 голосов
/ 17 февраля 2011

Кажется, что вы на самом деле не хотите проверять, закончен ли поток, а вместо этого хотите узнать, начался он или нет.Обычно вы делаете это следующим образом:

HANDLE hThread = NULL;//do this during initialization
...
if (!hThread)
   hThread = CreateThread(......);

Как только вы знаете, что оно началось (hThread не NULL), вы можете проверить, что оно завершено с помощью метода WaitForSingleObject, который вы уже используете.в курсе или с GetExitCodeThread.

2 голосов
/ 17 февраля 2011

Ваш дескриптор нити не инициализирован.Вы не можете использовать WaitForSingleObject() на ручках мусора.Вы пытаетесь сообщить состояние потока, созданного ранее, и перезапустите его, если он умер?Затем вам нужно отслеживать первый дескриптор потока.

1 голос
/ 17 февраля 2011

Возможно, вы имеете в виду функцию GetExitCodeThread.

Правка.

hThread = CreateEvent(0, 0, 1, 0); //sets to handle to signaled

Дескриптор нити становится сигнальным по окончании нити.Это позволяет ожидать окончания потока, используя операции Wait *.Ваш код создает дескриптор события, а не поток.

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