次の方法で共有


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 | スレッドのスケジューリング | マネージ スレッドとアンマネージ スレッド