다음을 통해 공유


TerminateThread 함수(processthreadsapi.h)

스레드를 종료합니다.

구문

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

매개 변수

[in, out] hThread

종료할 스레드에 대한 핸들입니다.

핸들에 THREAD_TERMINATE 액세스 권한이 있어야 합니다. 자세한 내용은 스레드 보안 및 액세스 권한을 참조하세요.

[in] dwExitCode

스레드의 종료 코드입니다. GetExitCodeThread 함수를 사용하여 스레드의 종료 값을 검색합니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

TerminateThread 는 스레드가 종료되도록 하는 데 사용됩니다. 이 경우 대상 스레드는 사용자 모드 코드를 실행할 기회가 없습니다. 스레드에 연결된 DLL은 스레드가 종료되고 있다는 알림을 받지 않습니다. 시스템은 스레드의 초기 스택을 해제합니다.

Windows Server 2003 및 Windows XP: 대상 스레드의 초기 스택이 해제되지 않아 리소스가 누출됩니다.

TerminateThread 는 가장 극단적인 경우에만 사용해야 하는 위험한 함수입니다. 대상 스레드가 수행하는 작업을 정확히 알고 있고 종료 시 대상 스레드가 실행될 수 있는 모든 코드를 제어하는 경우에만 TerminateThread 를 호출해야 합니다. 예를 들어 TerminateThread 로 인해 다음과 같은 문제가 발생할 수 있습니다.

  • 대상 스레드가 중요한 섹션을 소유하는 경우 중요한 섹션은 해제되지 않습니다.
  • 대상 스레드가 힙에서 메모리를 할당하는 경우 힙 잠금이 해제되지 않습니다.
  • 대상 스레드가 종료될 때 특정 kernel32 호출을 실행하는 경우 스레드 프로세스에 대한 kernel32 상태가 일치하지 않을 수 있습니다.
  • 대상 스레드가 공유 DLL의 전역 상태를 조작하는 경우 DLL 상태가 제거되어 DLL의 다른 사용자에게 영향을 줄 수 있습니다.
스레드는 핸들에 대한 액세스를 제어하는 것 외에는 TerminateThread로부터 자신을 보호할 수 없습니다. CreateThreadCreateProcess 함수에서 반환된 스레드 핸들에는 THREAD_TERMINATE 액세스 권한이 있으므로 이러한 핸들 중 하나를 보유한 호출자는 스레드를 종료할 수 있습니다.

이 함수가 호출될 때 대상 스레드가 프로세스의 마지막 스레드인 경우 스레드의 프로세스도 종료됩니다.

스레드 개체의 상태가 신호를 받고 스레드가 종료되기를 기다리던 다른 스레드가 해제됩니다. 스레드의 종료 상태 STILL_ACTIVEdwExitCode 매개 변수 값으로 변경됩니다.

스레드를 종료한다고 해서 반드시 시스템에서 스레드 개체가 제거되는 것은 아닙니다. 마지막 스레드 핸들이 닫혀 있으면 스레드 개체가 삭제됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 processthreadsapi.h(Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2에 Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CreateProcess

CreateThread

ExitThread

GetExitCodeThread

OpenThread

프로세스 및 스레드 함수

스레드 종료

스레드