¿Cómo puedo determinar si un subproceso Win32 ha terminado?
la documentación para Obtener subproceso de código de salida advierte de no utilizarlo por este motivo ya que el código de error STILL_ACTIVE puede devolverse por otros motivos.
¡Gracias por la ayuda! 🙂
MSDN menciona que “Cuando un subproceso termina, el objeto del subproceso alcanza un estado señalado, satisfaciendo los subprocesos que estaban esperando en el objeto”.
Por lo tanto, puede verificar si un hilo ha terminado comprobando el estado del identificador del hilo, ya sea que esté señalado 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
}
La documentación a la que vincula advierte contra el uso STILL_ACTIVE
como código de retorno, ya que no se puede distinguir del valor de retorno utilizado para indicar un subproceso activo. Así que no lo use como valor de retorno y no tendrá este problema.
Si el subproceso es suyo, puede asegurarse de que todos sus subprocesos devuelvan 0. Por lo tanto, este problema nunca surgirá. Creo que ExitCodeThread() es la mejor solución que la respuesta aceptada en caso de que necesite esto para sus propios hilos porque las “otras razones” mencionadas en MSDN son simplemente que USTED devuelve el código de salida STILL_ACTIVE de su rutina de hilo. Así que simplemente no lo hagas.
– Elmue
30 de agosto de 2018 a las 14:15