ThreadPriority 列挙体
Thread のスケジューリング優先順位を指定します。
<Serializable>
Public Enum ThreadPriority
[C#]
[Serializable]
public enum ThreadPriority
[C++]
[Serializable]
__value public enum ThreadPriority
[JScript]
public
Serializable
enum ThreadPriority
解説
ThreadPriority は、スレッドの優先順位として指定できるすべての値のセットを定義します。スレッドの優先順位には、あるスレッドを別のスレッドと比較した場合の相対優先順位を指定します。
優先順位はすべてのスレッドに割り当てられます。ランタイム内で作成されたスレッドには、初めに Normal の優先順位を割り当てます。一方、ランタイム外で作成されたスレッドは、ランタイムに入るときに以前の優先順位をそのまま保持します。 Priority プロパティにアクセスすると、スレッドの優先順位を取得および設定できます。
スレッドは、その優先順位に基づいて実行がスケジュールされます。スレッドの実行順序を決定するために使用するスケジューリング アルゴリズムは、各オペレーティング システムによって異なります。オペレーティング システムでは、フォアグラウンドとバックグランド間でユーザー インターフェイスのフォーカスを移動するのに伴って、スレッドの優先順位を動的に調整することもできます。
スレッドの優先順位は、スレッドの状態に影響しません。スレッドの状態は、オペレーティング システムがスレッドをスケジュールする前に Running にする必要があります。
メンバ
メンバ名 | 説明 |
---|---|
AboveNormal
.NET Compact Framework でもサポート。 |
Thread は優先順位が Normal のスレッドから Highest のスレッドの間にスケジュールできます。 |
BelowNormal
.NET Compact Framework でもサポート。 |
Thread は優先順位が Lowest のスレッドから Normal のスレッドの間にスケジュールできます。 |
Highest
.NET Compact Framework でもサポート。 |
Thread は、どの優先順位のスレッドの前にでもスケジュールできます。 |
Lowest
.NET Compact Framework でもサポート。 |
Thread は、ほかのどの優先順位のスレッドの後でもスケジュールできます。 |
Normal
.NET Compact Framework でもサポート。 |
Thread は優先順位が BelowNormal のスレッドから AboveNormal のスレッドの間にスケジュールできます。スレッドの既定の優先順位は Normal です。 |
使用例
[Visual Basic, C#, C++] スレッドの優先順位を変更した結果の例を次に示します。この例では、2 つのスレッドが作成され、1 つのスレッドの優先順位が BelowNormal に設定されます。両方のスレッドで while ループにより変数がインクリメントされ、設定した時間が経過するまで実行されます。
Option Explicit
Option Strict
Imports System
Imports System.Threading
Public Class Test
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
[C#]
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"));
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;
__gc class PriorityTest
{
bool loopSwitch;
public:
PriorityTest()
{
loopSwitch = true;
}
__property void set_LoopSwitch(bool value)
{
loopSwitch = value;
}
void ThreadMethod()
{
__int64 threadCount = 0;
while(loopSwitch)
{
threadCount++;
}
Console::WriteLine(S"{0} with {1,11} priority "
S"has a count = {2,13}", Thread::CurrentThread->Name,
__box(Thread::CurrentThread->Priority)->ToString(),
threadCount.ToString("N0"));
}
};
void main()
{
PriorityTest* priorityTest = new PriorityTest();
ThreadStart* startDelegate =
new ThreadStart(priorityTest, &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;
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Threading
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
System.Threading 名前空間 | Thread | スレッドのスケジューリング | マネージ スレッドとアンマネージ スレッド