Thread.Priority プロパティ
アセンブリ: mscorlib (mscorlib.dll 内)

Dim instance As Thread Dim value As ThreadPriority value = instance.Priority instance.Priority = value
public: property ThreadPriority Priority { ThreadPriority get (); void set (ThreadPriority value); }
/** @property */ public ThreadPriority get_Priority () /** @property */ public void set_Priority (ThreadPriority value)
public function get Priority () : ThreadPriority public function set Priority (value : ThreadPriority)
ThreadPriority 値の 1 つ。既定値は Normal です。



スレッドの優先順位を変更した結果の例を次に示します。この例では、2 つのスレッドが作成され、1 つのスレッドの優先順位が 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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ThreadPriority 列挙体
アセンブリ: mscorlib (mscorlib.dll 内)

<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public Enumeration ThreadPriority

メンバ名 | 説明 | |
---|---|---|
![]() | AboveNormal | Thread は優先順位が Normal のスレッドから Highest のスレッドの間にスケジュールできます。 |
![]() | BelowNormal | Thread は優先順位が Lowest のスレッドから Normal のスレッドの間にスケジュールできます。 |
![]() | Highest | Thread は、どの優先順位のスレッドの前にでもスケジュールできます。 |
![]() | Lowest | Thread は、ほかのどの優先順位のスレッドの後でもスケジュールできます。 |
![]() | Normal | Thread は優先順位が BelowNormal のスレッドから AboveNormal のスレッドの間にスケジュールできます。スレッドの既定の優先順位は Normal です。 |

ThreadPriority は、スレッドの優先順位として指定できるすべての値のセットを定義します。スレッドの優先順位には、あるスレッドを別のスレッドと比較した場合の相対優先順位を指定します。
優先順位はすべてのスレッドに割り当てられます。ランタイム内で作成されたスレッドには、初めに Normal の優先順位を割り当てます。一方、ランタイム外で作成されたスレッドは、ランタイムに入るときに以前の優先順位をそのまま保持します。Priority プロパティにアクセスすると、スレッドの優先順位を取得および設定できます。
スレッドは、その優先順位に基づいて実行がスケジュールされます。スレッドの実行順序を決定するために使用するスケジューリング アルゴリズムは、各オペレーティング システムによって異なります。オペレーティング システムでは、フォアグラウンドとバックグランド間でユーザー インターフェイスのフォーカスを移動するのに伴って、スレッドの優先順位を動的に調整することもできます。
スレッドの優先順位は、スレッドの状態に影響しません。スレッドの状態は、オペレーティング システムがスレッドをスケジュールする前に Running にする必要があります。

スレッドの優先順位を変更した結果の例を次に示します。この例では、2 つのスレッドが作成され、1 つのスレッドの優先順位が 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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からThreadPriorityを検索する場合は、下記のリンクをクリックしてください。

- ThreadPriorityのページへのリンク