Thread.Priority プロパティ
スレッドのスケジューリング優先順位を示す値を取得または設定します。
Public Property Priority As ThreadPriority
[C#]
public ThreadPriority Priority {get; set;}
[C++]
public: __property ThreadPriority get_Priority();public: __property void set_Priority(ThreadPriority);
[JScript]
public function get Priority() : ThreadPriority;public function set Priority(ThreadPriority);
プロパティ値
ThreadPriority 値の 1 つ。既定値は、 Normal です。
例外
例外の種類 | 条件 |
---|---|
ThreadStateException | スレッドが Aborted などの最終状態に達しています。 |
ArgumentException | 設定操作として指定した値が、無効な ThreadPriority 値です。 |
解説
スレッドには、次の優先順位値のいずれかを割り当てることができます。
- Highest
- AboveNormal
- Normal
- BelowNormal
- Lowest
オペレーティング システムは、スレッドの優先順位の利用を要求しません。
使用例
[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++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: 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, Common Language Infrastructure (CLI) Standard
参照
Thread クラス | Thread メンバ | System.Threading 名前空間 | ThreadPriority | スレッドのスケジューリング