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
멤버
멤버 이름 | 설명 | |
---|---|---|
AboveNormal | Thread는 우선 순위가 Highest인 스레드 뒤와 우선 순위가 Normal인 스레드 앞에 예약할 수 있습니다. | |
BelowNormal | Thread는 우선 순위가 Normal인 스레드 뒤와 우선 순위가 Lowest인 스레드 앞에 예약할 수 있습니다. | |
Highest | Thread는 다른 우선 순위가 할당된 스레드 앞에 예약할 수 있습니다. | |
Lowest | Thread는 다른 우선 순위가 할당된 스레드 뒤에 예약할 수 있습니다. | |
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 클래스