스레드 종료

스레드를 종료하면 다음과 같은 결과가 발생합니다.

  • 창 및 후크와 같은 스레드가 소유한 모든 리소스가 해제됩니다.
  • 스레드 종료 코드가 설정됩니다.
  • 스레드 개체에 신호가 전송됩니다.
  • 스레드가 프로세스의 유일한 활성 스레드인 경우 프로세스가 종료됩니다. 자세한 내용은 프로세스 종료를 참조하세요.

GetExitCodeThread 함수는 스레드의 종료 상태 반환합니다. 스레드가 실행되는 동안 종료 상태 STILL_ACTIVE. 스레드가 종료되면 종료 상태 STILL_ACTIVE 스레드의 종료 코드로 변경됩니다.

스레드가 종료되면 스레드 개체의 상태가 신호로 변경되어 스레드가 종료되기를 기다리던 다른 스레드가 해제됩니다. 동기화에 대한 자세한 내용은 여러 스레드의 실행 동기화를 참조하세요.

스레드가 종료되면 스레드에 대한 열려 있는 모든 핸들이 닫혀 있을 때까지 스레드 개체가 해제되지 않습니다.

스레드가 종료되는 방법

스레드는 다음 이벤트 중 하나가 발생할 때까지 실행됩니다.

스레드의 종료 코드는 ExitThread, ExitProcess, TerminateThread 또는 TerminateProcess 호출에 지정된 값이거나 스레드 함수에서 반환된 값입니다.

ExitThread에 의해 스레드가 종료되는 경우 시스템은 DisableThreadLibraryCalls 함수를 호출하지 않는 한 스레드가 DLL에서 분리되고 있음을 나타내는 값으로 연결된 각 DLL의 진입점 함수를 호출합니다. ExitProcess에 의해 스레드가 종료되면 DLL 진입점 함수가 한 번 호출되어 프로세스가 분리 중임을 나타냅니다. 스레드가 TerminateThread 또는 TerminateProcess에 의해 종료되면 DLL에 알림이 표시되지 않습니다. DLL에 대한 자세한 내용은 Dynamic-Link 라이브러리를 참조하세요.

TerminateThreadTerminateProcess 함수는 스레드가 클린 것을 허용하지 않고 연결된 DLL에 알리지 않으며 초기 스택을 해제하지 않으므로 극단적인 상황에서만 사용해야 합니다. 또한 스레드가 소유한 개체에 대한 핸들은 프로세스가 종료될 때까지 닫혀 있지 않습니다. 다음 단계에서는 더 나은 솔루션을 제공합니다.

  • CreateEvent 함수를 사용하여 이벤트 개체를 만듭니다.
  • 스레드를 만듭니다.
  • 각 스레드는 WaitForSingleObject 함수를 호출하여 이벤트 상태를 모니터링합니다. 대기 시간 제한 간격(0)을 사용합니다.
  • 이벤트가 신호된 상태로 설정되면 각 스레드는 자체 실행을 종료합니다(WaitForSingleObject 는 WAIT_OBJECT_0 반환).