İngilizce dilinde oku

Aracılığıyla paylaş


ThreadPriority Sabit listesi

Tanım

Zamanlama Threadönceliğini belirtir.

C#
public enum ThreadPriority
C#
[System.Serializable]
public enum ThreadPriority
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadPriority
Devralma
ThreadPriority
Öznitelikler

Alanlar

AboveNormal 3

Thread önceliğe sahip Highest iş parçacıklarından sonra ve önceliğe sahip Normal iş parçacıklarından önce zamanlanabilir.

BelowNormal 1

Thread önceliğe sahip Normal iş parçacıklarından sonra ve önceliğe sahip Lowest iş parçacıklarından önce zamanlanabilir.

Highest 4

, Thread başka bir önceliğe sahip iş parçacıklarından önce zamanlanabilir.

Lowest 0

başka Thread bir önceliğe sahip iş parçacıklarından sonra zamanlanabilir.

Normal 2

Thread önceliğe sahip AboveNormal iş parçacıklarından sonra ve önceliğe sahip BelowNormal iş parçacıklarından önce zamanlanabilir. İş parçacıkları varsayılan olarak önceliğe sahiptir Normal .

Örnekler

Aşağıdaki kod örneği, bir iş parçacığının önceliğini değiştirmenin sonucunu gösterir. Üç iş parçacığı oluşturulur, bir iş parçacığının önceliği BelowNormal, saniyenin önceliği ise AboveNormal olarak ayarlanır. Her iş parçacığı bir while döngüdeki değişkeni artırır ve belirli bir süre için çalışır.

C#
using System;
using System.Threading;
using Timers = System.Timers;

class Test
{
    static void Main()
    {
        PriorityTest priorityTest = new PriorityTest();

        Thread thread1 = new Thread(priorityTest.ThreadMethod);
        thread1.Name = "ThreadOne";
        Thread thread2 = new Thread(priorityTest.ThreadMethod);
        thread2.Name = "ThreadTwo";
        thread2.Priority = ThreadPriority.BelowNormal;
        Thread thread3 = new Thread(priorityTest.ThreadMethod);
        thread3.Name = "ThreadThree";
        thread3.Priority = ThreadPriority.AboveNormal;

        thread1.Start();
        thread2.Start();
        thread3.Start();
        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        priorityTest.LoopSwitch = false;
    }
}

class PriorityTest
{
    static volatile bool loopSwitch;
    [ThreadStatic] static long threadCount = 0;

    public PriorityTest()
    {
        loopSwitch = true;
    }

    public bool LoopSwitch
    {
        set{ loopSwitch = value; }
    }

    public void ThreadMethod()
    {
        while(loopSwitch)
        {
            threadCount++;
        }
        Console.WriteLine("{0,-11} with {1,11} priority " +
            "has a count = {2,13}", Thread.CurrentThread.Name, 
            Thread.CurrentThread.Priority.ToString(), 
            threadCount.ToString("N0")); 
    }
}
// The example displays output like the following:
//    ThreadOne   with      Normal priority has a count =   755,897,581
//    ThreadThree with AboveNormal priority has a count =   778,099,094
//    ThreadTwo   with BelowNormal priority has a count =     7,840,984

Açıklamalar

ThreadPriority bir iş parçacığı önceliği için tüm olası değerlerin kümesini tanımlar. İş parçacığı öncelikleri, bir iş parçacığının diğerinin göreli önceliğini belirtir.

Her iş parçacığının atanmış bir önceliği vardır. Çalışma zamanı içinde oluşturulan iş parçacıklarına başlangıçta öncelik atanırken Normal , çalışma zamanı dışında oluşturulan iş parçacıkları çalışma zamanına girdiklerinde önceki önceliklerini korur. Bir iş parçacığının özelliğine erişerek Priority önceliğini alabilir ve ayarlayabilirsiniz.

İş parçacıkları, önceliklerine göre yürütülmeye zamanlanır. İş parçacığı yürütme sırasını belirlemek için kullanılan zamanlama algoritması her işletim sistemine göre değişir. Kullanıcı arabiriminin odağı ön plan ile arka plan arasında taşındığından işletim sistemi iş parçacığı önceliğini dinamik olarak da ayarlayabilir.

İş parçacığının önceliği iş parçacığının durumunu etkilemez; İş parçacığının durumu, işletim sisteminin zamanlaması için önce olmalıdır Running .

Şunlara uygulanır

Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1

Ayrıca bkz.