¿Cómo puedo determinar si un subproceso Win32 ha terminado?

2 minutos de lectura

¿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! 🙂

  • 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


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
}

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

    – Chef Faraón

    29 de diciembre de 2012 a las 22:37

  • Tenga en cuenta que el código anterior para verificar el result no es correcto. Técnicamente, hay 3 valores de retorno posibles: WAIT_OBJECT_0, WAIT_TIMEOUT y WAIT_FAILED. Así que no puede simplemente decir “sí, está vivo”. Puede ser solo si obtienes WAIT_TIMEOUTde lo contrario es un error.

    – c00000fd

    22 de noviembre de 2013 a las 10:46


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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad