Compartilhar via


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.
Um thread não pode se proteger contra TerminateThread, exceto controlando o acesso aos identificadores. O identificador de thread retornado pelas funções CreateThread e CreateProcess tem acesso THREAD_TERMINATE , portanto, qualquer chamador que contém um desses identificadores pode encerrar o thread.

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

Confira também

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

Funções de thread e processo

Encerrando um thread

Threads