次の方法で共有


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