다음을 통해 공유


ThreadPriority 열거형

Thread의 예약 우선 순위를 지정합니다.

네임스페이스: System.Threading
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration ThreadPriority
‘사용 방법
Dim instance As ThreadPriority
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public enum ThreadPriority
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public enum class ThreadPriority
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public enum ThreadPriority
SerializableAttribute 
ComVisibleAttribute(true) 
public enum ThreadPriority

멤버

  멤버 이름 설명
Supported by the .NET Compact Framework AboveNormal Thread는 우선 순위가 Highest인 스레드 뒤와 우선 순위가 Normal인 스레드 앞에 예약할 수 있습니다. 
Supported by the .NET Compact Framework BelowNormal Thread는 우선 순위가 Normal인 스레드 뒤와 우선 순위가 Lowest인 스레드 앞에 예약할 수 있습니다. 
Supported by the .NET Compact Framework Highest Thread는 다른 우선 순위가 할당된 스레드 앞에 예약할 수 있습니다. 
Supported by the .NET Compact Framework Lowest Thread는 다른 우선 순위가 할당된 스레드 뒤에 예약할 수 있습니다. 
Supported by the .NET Compact Framework Normal Thread는 우선 순위가 AboveNormal인 스레드 뒤와 우선 순위가 BelowNormal인 스레드 앞에 예약할 수 있습니다. 스레드에는 기본적으로 Normal 우선 순위가 할당됩니다. 

설명

ThreadPriority는 가능한 모든 스레드 우선 순위 값의 집합을 정의합니다. 스레드 우선 순위는 한 스레드의 다른 스레드에 대한 상대적 우선 순위를 지정합니다.

모든 스레드에 우선 순위가 할당됩니다. 런타임 내에서 만든 스레드에는 초기에 Normal 우선 순위가 할당되는 반면 런타임 외부에서 만든 스레드는 런타임에 처음 들어갈 때 할당된 이전의 우선 순위를 유지합니다. 스레드의 Priority 속성에 액세스하여 스레드의 우선 순위를 가져오거나 설정할 수 있습니다.

스레드의 우선 순위를 기초로 실행을 예약합니다. 스레드 실행 순서를 결정하는 데 사용하는 예약 알고리즘은 각 운영 체제마다 다릅니다. 운영 체제에서는 포그라운드와 백그라운드 사이에 사용자 인터페이스의 초점이 이동함에 따라 스레드의 우선 순위를 동적으로 조정할 수도 있습니다.

스레드의 우선 순위는 스레드의 상태에 영향을 주지 않으며 운영 체제에서 스레드를 예약할 수 있게 되기 전에는 스레드가 Running 상태여야 합니다.

예제

다음 코드 예제에서는 스레드 우선 순위를 변경한 결과를 보여 줍니다. 두 개의 스레드를 만들고 그 중 하나의 우선 순위를 BelowNormal로 설정합니다. 두 스레드 모두 while 루프에서 변수가 늘어나며 설정된 시간 동안 실행됩니다.

Option Explicit
Option Strict

Imports System
Imports System.Threading

Public Class Test

    <MTAThread> _
    Shared Sub Main()
        Dim priorityTest As New PriorityTest()

        Dim threadOne As Thread = _
            New Thread(AddressOf priorityTest.ThreadMethod)
        threadOne.Name = "ThreadOne"
        Dim threadTwo As Thread = _
            New Thread(AddressOf priorityTest.ThreadMethod)
        threadTwo.Name = "ThreadTwo"

        threadTwo.Priority = ThreadPriority.BelowNormal
        threadOne.Start()
        threadTwo.Start()

        ' Allow counting for 10 seconds.
        Thread.Sleep(10000)
        priorityTest.LoopSwitch = False
    End Sub

End Class

Public Class PriorityTest

    Dim loopSwitchValue As Boolean 

    Sub New()
        loopSwitchValue = True
    End Sub

    WriteOnly Property LoopSwitch As Boolean
        Set
            loopSwitchValue = Value
        End Set
    End Property

    Sub ThreadMethod()
        Dim threadCount As Long = 0

        While loopSwitchValue
            threadCount += 1
        End While
        
        Console.WriteLine("{0} with {1,11} priority " & _
            "has a count = {2,13}", Thread.CurrentThread.Name, _
            Thread.CurrentThread.Priority.ToString(), _
            threadCount.ToString("N0")) 
    End Sub

End Class
using System;
using System.Threading;

class Test
{
    static void Main()
    {
        PriorityTest priorityTest = new PriorityTest();
        ThreadStart startDelegate = 
            new ThreadStart(priorityTest.ThreadMethod);

        Thread threadOne = new Thread(startDelegate);
        threadOne.Name = "ThreadOne";
        Thread threadTwo = new Thread(startDelegate);
        threadTwo.Name = "ThreadTwo";

        threadTwo.Priority = ThreadPriority.BelowNormal;
        threadOne.Start();
        threadTwo.Start();

        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        priorityTest.LoopSwitch = false;
    }
}

class PriorityTest
{
    bool loopSwitch;

    public PriorityTest()
    {
        loopSwitch = true;
    }

    public bool LoopSwitch
    {
        set{ loopSwitch = value; }
    }

    public void ThreadMethod()
    {
        long threadCount = 0;

        while(loopSwitch)
        {
            threadCount++;
        }
        Console.WriteLine("{0} with {1,11} priority " +
            "has a count = {2,13}", Thread.CurrentThread.Name, 
            Thread.CurrentThread.Priority.ToString(), 
            threadCount.ToString("N0")); 
    }
}
using namespace System;
using namespace System::Threading;
ref class PriorityTest
{
private:
   bool loopSwitch;

public:
   PriorityTest()
   {
      loopSwitch = true;
   }


   property bool LoopSwitch 
   {
      void set( bool value )
      {
         loopSwitch = value;
      }

   }
   void ThreadMethod()
   {
      __int64 threadCount = 0;
      while ( loopSwitch )
      {
         threadCount++;
      }

      Console::WriteLine( "{0} with {1,11} priority "
      "has a count = {2,13}", Thread::CurrentThread->Name, Thread::CurrentThread->Priority.ToString(), threadCount.ToString(  "N0" ) );
   }

};

int main()
{
   PriorityTest^ priorityTest = gcnew PriorityTest;
   ThreadStart^ startDelegate = gcnew ThreadStart( priorityTest, &PriorityTest::ThreadMethod );
   Thread^ threadOne = gcnew Thread( startDelegate );
   threadOne->Name =  "ThreadOne";
   Thread^ threadTwo = gcnew Thread( startDelegate );
   threadTwo->Name =  "ThreadTwo";
   threadTwo->Priority = ThreadPriority::BelowNormal;
   threadOne->Start();
   threadTwo->Start();
   
   // Allow counting for 10 seconds.
   Thread::Sleep( 10000 );
   priorityTest->LoopSwitch = false;
}
import System.*;
import System.Threading.*;
import System.Threading.Thread;

class Test
{
    public static void main(String[] args)
    {
        PriorityTest priorityTest = new PriorityTest();
        ThreadStart startDelegate = new ThreadStart(priorityTest.ThreadMethod);
        Thread threadOne = new Thread(startDelegate);

        threadOne.set_Name("ThreadOne");

        Thread threadTwo = new Thread(startDelegate);

        threadTwo.set_Name("ThreadTwo");
        threadTwo.set_Priority(ThreadPriority.BelowNormal);
        threadOne.Start();
        threadTwo.Start();

        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        priorityTest.set_LoopSwitch(false);
    } //main
} //Test

class PriorityTest
{
    private boolean loopSwitch;

    public PriorityTest()
    {
        loopSwitch = true;
    } //PriorityTest

    /** @property 
     */
    public void set_LoopSwitch(boolean value)
    {
        loopSwitch = value;
    } //set_LoopSwitch

    public void ThreadMethod()
    {
        long threadCount = 0;

        while (loopSwitch) {
            threadCount++;
        }

        Console.WriteLine("{0} with {1,11} priority " + "has a count = {2,13}",
            Thread.get_CurrentThread().get_Name(),
            Thread.get_CurrentThread().get_Priority().toString(),
            ((System.Int32)threadCount).ToString("N0"));
    } //ThreadMethod
} //PriorityTest

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

System.Threading 네임스페이스
Thread 클래스

기타 리소스

스레드 스케줄링
관리되는 스레딩과 관리되지 않는 스레딩