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
- 상속
- 특성
필드
| Name | 값 | Description |
|---|---|---|
| Running | 0 | 스레드가 시작되었으며 아직 중지되지 않았습니다. |
| StopRequested | 1 | 스레드를 중지하도록 요청되고 있습니다. 내부 전용입니다. |
| SuspendRequested | 2 | 스레드가 일시 중단하도록 요청되고 있습니다. |
| Background | 4 | 스레드가 포그라운드 스레드가 아닌 백그라운드 스레드로 실행되고 있습니다. 이 상태는 속성을 설정하여 제어됩니다 IsBackground . |
| Unstarted | 8 | Start() 스레드에서 메서드가 호출되지 않았습니다. |
| Stopped | 16 | 스레드가 중지되었습니다. |
| WaitSleepJoin | 32 | 스레드가 차단됩니다. 호출 Sleep(Int32) 또는 잠금 요청(예: 호출 Enter(Object) 또는 Join()Wait(Object, Int32, Boolean) 대기) 또는 스레드 동기화 개체(예: ManualResetEvent스레드 동기화 개체)의 결과일 수 있습니다. |
| Suspended | 64 | 스레드가 일시 중단되었습니다. |
| AbortRequested | 128 | Abort(Object) 스레드에서 메서드가 호출되었지만 스레드가 종료를 시도할 보류 중인 ThreadAbortException 메서드를 아직 받지 못했습니다. |
| Aborted | 256 | 스레드 상태가 포함 AbortRequested 되고 스레드가 이제 중지되었지만 해당 상태는 아직 변경되지 Stopped않았습니다. |
설명
열거형은 ThreadState 스레드에 대해 가능한 모든 실행 상태 집합을 정의합니다. 몇 가지 디버깅 시나리오에서만 유용합니다. 코드는 스레드 상태를 사용하여 스레드 활동을 동기화해서는 안 됩니다.
스레드가 만들어지면 종료될 때까지 하나 이상의 상태에 있습니다. 공용 언어 런타임 내에서 만든 스레드는 처음에는 Unstarted 상태에 있지만 외부 또는 관리되지 않는 런타임에 들어오는 스레드는 이미 Running 상태에 있습니다. 스레드는 호출Thread.Start하여 Unstarted 상태에서 상태로 Running 전환됩니다. 스레드가 호출Start의 결과로 상태를 벗어나 Unstarted 면 상태로 돌아갈 Unstarted 수 없습니다.
스레드는 지정된 시간에 둘 이상의 상태에 있을 수 있습니다. 예를 들어 호출 Monitor.Wait시 스레드가 차단되고 차단된 스레드에서 다른 스레드가 호출 Thread.Abort 되는 경우 차단된 스레드는 동시에 상태와 AbortRequested 상태에 있습니다WaitSleepJoin. 이 경우 스레드가 호출 Monitor.Wait 에서 반환되거나 중단 ThreadAbortException 되는 즉시 중단을 시작할 수 있습니다. 값의 ThreadState 모든 조합이 유효하지는 않습니다. 예를 들어 스레드는 상태와 Unstarted 상태에 모두 Aborted 있을 수 없습니다.
스레드는 상태를 떠날 Stopped 수 없습니다.
중요합니다
두 개의 스레드 상태 열거형이 있습니다. System.Threading.ThreadStateSystem.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