ThreadPriority Enumeración
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Especifica la prioridad de programación de 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
- Herencia
- Atributos
Campos
AboveNormal | 3 | Thread puede programarse después de los subprocesos con prioridad |
BelowNormal | 1 | Thread puede programarse después de los subprocesos con prioridad |
Highest | 4 | Thread puede programarse antes que los subprocesos que tengan cualquier otra prioridad. |
Lowest | 0 | Thread puede programarse después de los subprocesos que tengan cualquier otra prioridad. |
Normal | 2 | Thread puede programarse después de los subprocesos con prioridad |
Ejemplos
En el ejemplo de código siguiente se muestra el resultado de cambiar la prioridad de un subproceso. Se crean tres subprocesos, la prioridad de un subproceso se establece en BelowNormal y la prioridad de un segundo se establece en AboveNormal. Cada subproceso incrementa una variable en un while
bucle y se ejecuta durante un tiempo establecido.
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
Comentarios
ThreadPriority define el conjunto de todos los valores posibles para una prioridad de subproceso. Las prioridades de subproceso especifican la prioridad relativa de un subproceso frente a otro.
Cada subproceso tiene una prioridad asignada. Los subprocesos creados en el tiempo de ejecución se asignan inicialmente a la Normal
prioridad, mientras que los subprocesos creados fuera del tiempo de ejecución conservan su prioridad anterior cuando entran en tiempo de ejecución. Puede obtener y establecer la prioridad de un subproceso accediendo a su Priority propiedad .
Los subprocesos están programados para ejecutarse según su prioridad. El algoritmo de programación utilizado para determinar el orden de ejecución del subproceso varía con cada sistema operativo. El sistema operativo también puede ajustar la prioridad del subproceso dinámicamente a medida que el foco de la interfaz de usuario se mueve entre el primer plano y el fondo.
La prioridad de un subproceso no afecta al estado del subproceso; el estado del subproceso debe ser Running antes de que el sistema operativo pueda programarlo.