Číst v angličtině

Sdílet prostřednictvím


ThreadPriority Výčet

Definice

Určuje prioritu plánování .Thread

public enum ThreadPriority
[System.Serializable]
public enum ThreadPriority
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadPriority
Dědičnost
ThreadPriority
Atributy

Pole

Name Hodnota Description
AboveNormal 3

Může Thread být naplánována po vláknech s Highest prioritou a před vlákny s Normal prioritou.

BelowNormal 1

Může Thread být naplánována po vláknech s Normal prioritou a před vlákny s Lowest prioritou.

Highest 4

Lze Thread naplánovat před vlákny s jakoukoli jinou prioritou.

Lowest 0

Lze Thread naplánovat po vláknech s jakoukoli jinou prioritou.

Normal 2

Může Thread být naplánována po vláknech s AboveNormal prioritou a před vlákny s BelowNormal prioritou. Vlákna mají Normal ve výchozím nastavení prioritu.

Příklady

Následující příklad kódu ukazuje výsledek změny priority vlákna. Vytvoří se tři vlákna, priorita jednoho vlákna je nastavena na BelowNormal a priorita sekundy je nastavena na AboveNormal. Každé vlákno zvýší proměnnou ve smyčce while a spustí se po stanovenou dobu.

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

Poznámky

ThreadPriority definuje sadu všech možných hodnot pro prioritu vlákna. Priority vláken určují relativní prioritu jednoho vlákna oproti jinému.

Každé vlákno má přiřazenou prioritu. Vláknům vytvořeným v modulu runtime je zpočátku přiřazena priorita Normal , zatímco vlákna vytvořená mimo modul runtime si při vstupu do modulu runtime zachovají předchozí prioritu. Přístup k jeho Priority vlastnosti můžete získat a nastavit prioritu vlákna.

Spouštění vláken je naplánováno na základě jejich priority. Algoritmus plánování použitý k určení pořadí provádění vlákna se liší u každého operačního systému. Operační systém může také dynamicky upravovat prioritu vlákna, protože fokus uživatelského rozhraní se přesouvá mezi popředím a pozadím.

Priorita vlákna nemá vliv na stav vlákna; stav vlákna musí být Running před tím, než ho operační systém může naplánovat.

Platí pro

Viz také