ThreadState 열거형
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
Thread의 실행 상태를 지정합니다.
이 열거형은 멤버 값의 비트 조합을 지원합니다.
public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState =
[<System.Flags>]
[<System.Serializable>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState =
Public Enum ThreadState
- 상속
- 특성
필드
Aborted | 256 | 스레드 상태에 AbortRequested가 포함되어 있고 스레드가 작동하지 않지만 상태가 아직 Stopped로 변경되지 않았습니다. |
AbortRequested | 128 | 스레드에 Abort(Object) 메서드가 호출되었지만 해당 스레드는 자신을 종결시키려는 보류된 ThreadAbortException을 받지 못했습니다. |
Background | 4 | 해당 스레드는 전경 스레드와 반대인 배경 스레드로 실행됩니다. 이 상태는 IsBackground 속성을 설정하여 제어합니다. |
Running | 0 | 스레드가 시작되었고 아직 중지되지 않았습니다. |
Stopped | 16 | 스레드가 중지되었습니다. |
StopRequested | 1 | 스레드를 중지하도록 요청했습니다. 이는 내부 전용입니다. |
Suspended | 64 | 스레드가 일시 중단되었습니다. |
SuspendRequested | 2 | 스레드를 일시 중단하도록 요청하고 있습니다. |
Unstarted | 8 | 스레드에 Start() 메서드가 호출되지 않았습니다. |
WaitSleepJoin | 32 | 스레드가 차단되었습니다. Sleep(Int32) 또는 Join()를 호출하거나, Enter(Object) 또는 Wait(Object, Int32, Boolean)를 호출하여 잠금을 허용하거나, ManualResetEvent와 같은 스레드 동기화 개체에서 대기하는 결과가 발생할 수 있습니다. |
설명
열거형은 ThreadState
스레드에 대해 가능한 모든 실행 상태 집합을 정의합니다. 몇 가지 디버깅 시나리오에만 관심이 있습니다. 코드는 스레드 상태를 사용하여 스레드 활동을 동기화해서는 안 됩니다.
스레드가 만들어지면 종료될 때까지 상태 중 하나 이상에 있습니다. 공용 언어 런타임 내에서 생성된 스레드는 처음에는 Unstarted 상태에 있지만, 런타임에 들어오는 외부 또는 관리되지 않는 스레드는 이미 Running 상태에 있습니다. 스레드는 호출Thread.Start을 Unstarted 통해 상태에서 상태로 Running 전환됩니다. Unstarted 호출의 결과로 스레드가 Start상태를 벗어난 후에는 Unstarted 상태로 돌아갈 수 없습니다.
스레드는 지정된 시간에 둘 이상의 상태에 있을 수 있습니다. 예를 들어 호출 시 스레드가 차단되고 차단된 Monitor.Wait스레드에서 다른 스레드가 호출 Thread.Abort 되는 경우 차단된 스레드는 동시에 두 상태 모두 WaitSleepJoin AbortRequested 에 있습니다. 이 경우 스레드가 호출 Monitor.Wait 에서 반환되거나 중단 ThreadAbortException 되는 즉시 중단을 시작할 수 있습니다. 값의 ThreadState
모든 조합이 유효하지는 않습니다. 예를 들어 스레드는 상태와 Unstarted 상태에 모두 Aborted 있을 수 없습니다.
스레드는 Stopped 상태를 벗어날 수 없습니다.
중요
두 개의 스레드 상태 열거형이 있습니다. System.Threading.ThreadState System.Diagnostics.ThreadState
다음 표에서는 상태 변경을 일으키는 작업을 보여 줍니다.
작업 | ThreadState |
---|---|
스레드는 공용 언어 런타임 내에 만들어집니다. | Unstarted |
다른 스레드는 새 스레드에서 Thread.Start 메서드를 호출하고 호출이 반환됩니다. Start 새 스레드가 실행되기 시작할 때까지 메서드가 반환되지 않습니다. 호출하는 동안 새 스레드가 실행될 시점을 알 수 있는 Start방법은 없습니다. |
Running |
스레드 호출 Sleep | WaitSleepJoin |
스레드가 다른 개체에서 Monitor.Wait 를 호출합니다. | WaitSleepJoin |
스레드가 다른 스레드에서 Join 를 호출합니다. | WaitSleepJoin |
다른 스레드 호출 Interrupt | Running |
다른 스레드 호출 Suspend | SuspendRequested |
스레드가 Suspend 요청에 응답합니다. | Suspended |
다른 스레드 호출 Resume | Running |
다른 스레드 호출 Abort | AbortRequested |
스레드가 요청에 응답합니다 Abort . | Stopped |
스레드가 종료됩니다. | Stopped |
위에서 언급한 상태 외에도 스레드가 백그라운드에서 실행 중인지 전경에서 실행 중인지를 나타내는 상태도 Background 있습니다. 자세한 내용은 포그라운드 및 백그라운드 스레드를 참조하세요.
스레드의 속성은 Thread.ThreadState 스레드의 현재 상태를 제공합니다. 애플리케이션 스레드 실행 중인지 여부를 결정 하는 비트 마스크를 사용 해야 합니다. 값 Running 이 0이므로 다음 코드에서 스레드가 실행 중인지 테스트합니다.
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0