Función TerminateThread (processthreadsapi.h)

Finaliza un subproceso.

Sintaxis

BOOL TerminateThread(
  [in, out] HANDLE hThread,
  [in]      DWORD  dwExitCode
);

Parámetros

[in, out] hThread

Identificador del subproceso que se va a finalizar.

El identificador debe tener el derecho de acceso THREAD_TERMINATE . Para obtener más información, consulte Derechos de acceso y seguridad de subprocesos.

[in] dwExitCode

Código de salida del subproceso. Use la función GetExitCodeThread para recuperar el valor de salida de un subproceso.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

TerminateThread se usa para hacer que un subproceso salga. Cuando esto ocurre, el subproceso de destino no tiene la oportunidad de ejecutar ningún código en modo de usuario. Los archivos DLL adjuntos al subproceso no reciben una notificación de que el subproceso finaliza. El sistema libera la pila inicial del subproceso.

Windows Server 2003 y Windows XP: La pila inicial del subproceso de destino no se libera, lo que provoca una pérdida de recursos.

TerminateThread es una función peligrosa que solo se debe usar en los casos más extremos. Solo debe llamar a TerminateThread si sabe exactamente lo que hace el subproceso de destino y controla todo el código que el subproceso de destino podría estar ejecutando en el momento de la finalización. Por ejemplo, TerminateThread puede dar lugar a los siguientes problemas:

  • Si el subproceso de destino posee una sección crítica, no se liberará la sección crítica.
  • Si el subproceso de destino asigna memoria del montón, no se liberará el bloqueo del montón.
  • Si el subproceso de destino ejecuta determinadas llamadas kernel32 cuando finaliza, el estado kernel32 del proceso del subproceso podría ser incoherente.
  • Si el subproceso de destino está manipulando el estado global de un archivo DLL compartido, el estado del archivo DLL podría destruirse, lo que afecta a otros usuarios del archivo DLL.
Un subproceso no se puede proteger contra TerminateThread, aparte de controlar el acceso a sus identificadores. El identificador de subproceso devuelto por las funciones CreateThread y CreateProcess tiene THREAD_TERMINATE acceso, por lo que cualquier autor de llamada que contenga uno de estos identificadores puede finalizar el subproceso.

Si el subproceso de destino es el último subproceso de un proceso cuando se llama a esta función, el proceso del subproceso también se termina.

El estado del objeto de subproceso se señala, liberando cualquier otro subproceso que hubiera estado esperando a que finalice el subproceso. El estado de finalización del subproceso cambia de STILL_ACTIVE al valor del parámetro dwExitCode .

La terminación de un subproceso no elimina necesariamente el objeto de subproceso del sistema. Cuando se cierra el último identificador de subproceso, se elimina un objeto de subproceso.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado processthreadsapi.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

Funciones de proceso y subproceso

Terminación de un subproceso

Subprocesos