2008-11-19 27 views

Respuesta

33

MSDN menciona que "Cuando termina un hilo, el objeto de hilo alcanza un estado señalado, que satisface los hilos que estaban esperando en el objeto".

Por lo tanto, se puede comprobar si un mensaje ha terminado comprobando el estado del controlador de subproceso - si se trata de una señal o no:

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 
} 
+0

Estoy de acuerdo con esta solución. Sin embargo, estaba usando 'code == WAIT_TIMEOUT && ExitCode == STILL_ACTIVE' donde tenía code & ExitCode definido por' DWORD code = WaitForSingleObject (tHwnd, 0) 'y' GetExitCodeThread (tHwnd, & ExitCode) 'respectivamente. –

+3

Tenga en cuenta que el código anterior para comprobar el 'resultado 'no es correcto. Técnicamente hay 3 posibles valores de retorno: 'WAIT_OBJECT_0',' WAIT_TIMEOUT' y 'WAIT_FAILED'. Entonces no puede hacer otra cosa, "sí, está vivo". Puede ser solo si obtienes 'WAIT_TIMEOUT'; de lo contrario, es un error. – c00000fd

5

La documentación que enlaza advierte contra el uso de STILL_ACTIVE como código de retorno, ya que no se puede distinguir del valor de retorno utilizado para indicar un hilo activo. Así que no lo use como valor de retorno y no tendrá este problema.

+0

Doh !!! ¡Lo leí totalmente! Gracias por aclarar eso! – Uhall

Cuestiones relacionadas