vb.net2019-多线程并行计算(6)
線程優先級的設置方法有以下幾種
1)如上面代碼所示設置優先級
mythread1.Priority = ThreadPriority.Lowest
mythread2.Priority = ThreadPriority.Highest
mythread3.Priority = ThreadPriority.Normal
這種方式 使CLR做一些額外的簿記工作,以便當線程返回線程池時優先級比Normal更高時,通過這些簿記信息來
恢復優先級。
ThreadPriority枚舉值有以下幾種
Lowest 可以將 Thread 安排在具有任何其他優先級的線程之后。
BelowNormal 可以將 Thread 安排在具有 Normal 優先級的線程之后,在具有 Lowest 優先級的線程之前。
Normal 可以將 Thread 安排在具有 AboveNormal 優先級的線程之后,在具有 BelowNormal 優先級的線程之前。 默認情況下,線程具有 Normal 優先級。
AboveNormal 可以將 Thread 安排在具有 Highest 優先級的線程之后,在具有 Normal 優先級的線程之前。
Highest 可以將 Thread 安排在具有任何其他優先級的線程之前。
ThreadPriority 定義一組線程優先級的所有可能值。 線程優先級指定一個線程相對于另一個線程的相對優先級。
每個線程都有一個分配的優先級。 在運行時內創建的線程最初被分配 Normal 優先級,而在運行時外創建的線程在進入運行時時將保留其先前的優先級。 可以通過訪問線程的 Priority 屬性來獲取和設置其優先級。
根據線程的優先級調度線程的執行。 用于確定線程執行順序的調度算法隨操作系統的不同而不同。 操作系統也可以在用戶界面的焦點在前臺和后臺之間移動時動態地調整線程的優先級。
2)通過System.Diagnostics.ProcessThread來設置優先級,它能設置比第1種方法更多的優先級
Idle 指定空閑優先級。 它是所有線程的可能的最低優先級值,與關聯的 ProcessPriorityClass 的值無關。
Lowest 指定最低優先級。 這比關聯的 ProcessPriorityClass 的普通優先級低兩級。
BelowNormal 指定的優先級比關聯的 ProcessPriorityClass 的普通優先級低一級。
Normal 指定關聯的 ProcessPriorityClass 的普通優先級。
AboveNormal 指定的優先級比關聯的 ProcessPriorityClass 的普通優先級高一級。
Highest 指定最高優先級。 這比關聯的 ProcessPriorityClass 的普通優先級高兩級。
TimeCritical 指定時間關鍵優先級。 這是所有線程中的最高優先級,與關聯的 ProcessPriorityClass 的值無關
此外,還可以設置線程動態優先級調整的開關
ProcessThread.PriorityBoostEnabled
當 PriorityBoostEnabled 為 true 時,只要關聯的進程離開等待狀態,系統便暫時提升該線程的優先級。 此操作可防止其他進程中斷當前線程的處理。 PriorityBoostEnabled 設置影響所有現有線程及該進程隨后創建的所有線程。 若要還原正常行為,請將 PriorityBoostEnabled 屬性設置為 false。
僅當線程運行在一個將 PriorityClass 設置為動態優先級枚舉值之一(Normal、High 或 RealTime)時,PriorityBoostEnabled 才有效。
4、睡眠與阻塞
Sleep(Int32)將當前線程掛起指定的時間。
注意參數為線程被阻塞的毫秒數
Sleep(TimeSpan)將當前線程阻塞指定的時間。
下面是關于msdn的阻塞的例子
Imports System.ThreadingClass ExampleShared Sub Main()Dim interval As New TimeSpan(0, 0, 2)For i As Integer = 0 To 4Console.WriteLine("Sleep for 2 seconds.")Thread.Sleep(interval)NextConsole.WriteLine("Main thread exits.")End Sub End Classmythread1.Start(myprocess)mythread2.Start(myprocess)mythread3.Start(myprocess)mythread1.Suspend()mythread2.Suspend()mythread3.Suspend()mythread1.Resume()mythread2.Resume()mythread3.Resume()總結
以上是生活随笔為你收集整理的vb.net2019-多线程并行计算(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebSocket协议入门介绍
- 下一篇: codelite13 wxWidgets