Função TerminateThread (processthreadsapi.h)
Encerra um thread.
Sintaxe
BOOL TerminateThread(
[in, out] HANDLE hThread,
[in] DWORD dwExitCode
);
Parâmetros
[in, out] hThread
Um identificador para o thread a ser encerrado.
O identificador deve ter o acesso de THREAD_TERMINATE correto. Para obter mais informações, consulte Segurança de thread e direitos de acesso.
[in] dwExitCode
O código de saída do thread. Use a função GetExitCodeThread para recuperar o valor de saída de um thread.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
TerminateThread é usado para fazer com que um thread seja encerrado. Quando isso ocorre, o thread de destino não tem nenhuma chance de executar nenhum código do modo de usuário. As DLLs anexadas ao thread não são notificadas de que o thread está terminando. O sistema libera a pilha inicial do thread.
Windows Server 2003 e Windows XP: A pilha inicial do thread de destino não é liberada, causando um vazamento de recurso.
TerminateThread é uma função perigosa que só deve ser usada nos casos mais extremos. Você deve chamar TerminateThread somente se souber exatamente o que o thread de destino está fazendo e controlar todo o código que o thread de destino pode estar executando no momento do encerramento. Por exemplo, TerminateThread pode resultar nos seguintes problemas:
- Se o thread de destino possuir uma seção crítica, a seção crítica não será lançada.
- Se o thread de destino estiver alocando memória do heap, o bloqueio de heap não será liberado.
- Se o thread de destino estiver executando determinadas chamadas kernel32 quando for encerrado, o estado kernel32 para o processo do thread poderá ser inconsistente.
- Se o thread de destino estiver manipulando o estado global de uma DLL compartilhada, o estado da DLL poderá ser destruído, afetando outros usuários da DLL.
Se o thread de destino for o último thread de um processo quando essa função for chamada, o processo do thread também será encerrado.
O estado do objeto thread torna-se sinalizado, liberando quaisquer outros threads que estavam aguardando o término do thread. A terminação do thread status muda de STILL_ACTIVE para o valor do parâmetro dwExitCode.
Encerrar um thread não remove necessariamente o objeto thread do sistema. Um objeto thread é excluído quando o último identificador de thread é fechado.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | processthreadsapi.h (inclua Windows.h no Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |