ThreadPriority Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje prioritu plánování .Thread
public enum class ThreadPriority
public enum ThreadPriority
[System.Serializable]
public enum ThreadPriority
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadPriority
type ThreadPriority =
[<System.Serializable>]
type ThreadPriority =
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadPriority =
Public Enum ThreadPriority
- Dědičnost
- Atributy
Pole
AboveNormal | 3 | Může Thread být naplánována po vláknech s |
BelowNormal | 1 | Může Thread být naplánována po vláknech s |
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 |
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
Imports System.Threading
Imports Timers = System.Timers
Public Module Example
Dim t As Timers.Timer
Private priorityTest As New PriorityTest()
Public Sub Main()
Dim thread1 As New Thread(AddressOf priorityTest.ThreadMethod)
thread1.Name = "ThreadOne"
Dim thread2 As New Thread(AddressOf priorityTest.ThreadMethod)
thread2.Name = "ThreadTwo"
thread2.Priority = ThreadPriority.BelowNormal
Dim thread3 As New Thread(AddressOf priorityTest.ThreadMethod)
thread3.Name = "ThreadThree"
thread3.Priority = ThreadPriority.AboveNormal
thread1.Start()
thread2.Start()
thread3.Start()
' Allow threads to execute for about 10 seconds.
t = New Timers.Timer()
t.AutoReset = False
t.Interval = 10000
AddHandler t.Elapsed, AddressOf Elapsed
t.Start()
End Sub
Private Sub Elapsed(sender As Object, e As Timers.ElapsedEventArgs)
priorityTest.LoopSwitch = False
End Sub
End Module
Public Class PriorityTest
Private Shared loopSwitchValue As Boolean
<ThreadStatic> Shared threadCount As Long
Sub New()
loopSwitchValue = True
End Sub
WriteOnly Property LoopSwitch As Boolean
Set
loopSwitchValue = Value
End Set
End Property
Sub ThreadMethod()
Do While True
threadCount += 1
If Not loopSwitchValue Then Exit Do
Loop
Console.WriteLine("{0,-11} with {1,11} priority " &
"has a count = {2,13}", Thread.CurrentThread.Name,
Thread.CurrentThread.Priority.ToString(),
threadCount.ToString("N0"))
End Sub
End Class
' The example displays the following output:
' 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.