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.
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 |