Bagikan melalui


ThreadPriority Enum

Definisi

Menentukan prioritas penjadwalan 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
Warisan
ThreadPriority
Atribut

Bidang

Nama Nilai Deskripsi
Lowest 0

Thread dapat dijadwalkan setelah utas dengan prioritas lain.

BelowNormal 1

Thread dapat dijadwalkan setelah utas dengan Normal prioritas dan sebelum yang memiliki Lowest prioritas.

Normal 2

Thread dapat dijadwalkan setelah utas dengan AboveNormal prioritas dan sebelum yang memiliki BelowNormal prioritas. Alur memiliki Normal prioritas secara default.

AboveNormal 3

Thread dapat dijadwalkan setelah utas dengan Highest prioritas dan sebelum yang memiliki Normal prioritas.

Highest 4

Thread dapat dijadwalkan sebelum utas dengan prioritas lainnya.

Contoh

Contoh kode berikut menunjukkan hasil mengubah prioritas utas. Tiga utas dibuat, prioritas satu utas diatur ke BelowNormal, dan prioritas detik diatur ke AboveNormal. Setiap utas menaikkan variabel dalam perulangan while dan berjalan untuk waktu yang ditetapkan.

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

Keterangan

ThreadPriority mendefinisikan kumpulan semua nilai yang mungkin untuk prioritas utas. Prioritas utas menentukan prioritas relatif dari satu utas versus yang lain.

Setiap utas memiliki prioritas yang ditetapkan. Utas yang dibuat dalam runtime awalnya diberi Normal prioritas, sementara utas yang dibuat di luar runtime mempertahankan prioritas sebelumnya saat memasuki runtime. Anda bisa mendapatkan dan mengatur prioritas utas dengan mengakses propertinya Priority .

Rangkaian dijadwalkan untuk eksekusi berdasarkan prioritas mereka. Algoritma penjadwalan yang digunakan untuk menentukan urutan eksekusi utas bervariasi menurut setiap sistem operasi. Sistem operasi juga dapat menyesuaikan prioritas utas secara dinamis karena fokus antarmuka pengguna dipindahkan antara latar depan dan latar belakang.

Prioritas utas tidak memengaruhi status utas; status utas harus Running sebelum sistem operasi dapat menjadwalkannya.

Berlaku untuk

Lihat juga