c - Kontroller, om tråden kører

Indlæg af Hanne Mølgaard Plasc

Problem



Når jeg erklærer en HANDLE


HANDLE hThread;


Jeg foretager en check for at se om tråden kører,


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


Men det fejler for første gang at kontrollere, om tråden kører. Hvordan kan det gøres? Jeg tror, ​​at det eneste, jeg har brug for, er at sætte hThread til signaleret tilstand på en eller anden måde.


Rediger



Jeg har fundet noget som dette


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


Er du enig i dette?

Bedste reference


Det lader til, at du faktisk ikke vil teste om tråden er færdig, men i stedet ønsker at vide, om det er startet. Det ville du normalt gøre som følger:


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


Når du ved, at det er startet (hThread ikke NULL) så kan du teste, at det bliver gennemført med WaitForSingleObject -metoden, som du allerede er opmærksom på, eller med GetExitCodeThread. [13]

Andre referencer 1


Dit trådhåndtag er uninitialiseret. Du kan ikke bruge WaitForSingleObject() på affaldshåndteringer. Forsøger du at fortælle status for en tråd, der er oprettet tidligere, og genstarte den, hvis den er død? Så skal du holde styr på det første trådhåndtag.

Andre referencer 2


Måske betyder du GetExitCodeThread funktion. [14]


Redigere.


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


Gevindhåndtaget bliver signaleret, når tråden er færdig. Dette gør det muligt at vente på trådenden ved hjælp af ventet * -operationer. Din kode skaber hændelseshåndtag og ikke tråd.