日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vb.net2019-多线程并行计算(6)

發布時間:2025/3/12 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vb.net2019-多线程并行计算(6) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Imports System Imports System.Threading Imports System.Diagnostics Imports System.Diagnostics.ThreadStateModule Module1Sub Main()Dim mythread1 As ThreadDim mythread2 As ThreadDim mythread3 As Thread'創建線程對象mythread1 = New Thread(AddressOf mythreadrun)mythread2 = New Thread(AddressOf mythreadrun)mythread3 = New Thread(AddressOf mythreadrun)mythread1.Name = "thread_1"mythread2.Name = "thread_2"mythread3.Name = "thread_3"'設置優先級mythread1.Priority = ThreadPriority.Lowestmythread2.Priority = ThreadPriority.Highestmythread3.Priority = ThreadPriority.NormalConsole.WriteLine(Now.ToLongTimeString & "線程對象創建完畢,開始執行線程")'執行線程mythread1.Start()mythread2.Start()mythread3.Start()'等待線程完成mythread1.Join()mythread2.Join()mythread3.Join()'線程執行完畢Console.WriteLine(Now.ToLongTimeString & "線程執行完畢!")End SubPublic Sub mythreadrun()Dim mynum As Integer'分配一個新的槽,這個槽存放線程本地數據,槽名稱為'myjg,名稱必須唯一Dim jg As LocalDataStoreSlotjg = Thread.GetNamedDataSlot("myjg")Thread.SetData(jg, 100)TryFor mynum = 1 To 30Thread.SetData(jg, Thread.GetData(jg) - mynum)Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",計算結果為:" & Thread.GetData(jg))Thread.Sleep(50)NextCatchConsole.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "線程異常終止!")'終止線程Thread.CurrentThread.Abort()FinallyConsole.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "線程運行完畢!")Console.WriteLine(Thread.CurrentThread.Name & " " & Thread.CurrentThread.Priority.ToString)Thread.FreeNamedDataSlot("myjg")End TryEnd Sub End Module

線程優先級的設置方法有以下幾種

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 的值無關

Dim myprocess As Process = Process.GetCurrentProcess() Dim value As ProcessThreadCollection Dim pt As ProcessThread value = myprocess.Threads For Each pt In valuept.PriorityLevel = ThreadPriorityLevel.AboveNormal Next

此外,還可以設置線程動態優先級調整的開關

ProcessThread.PriorityBoostEnabled

當 PriorityBoostEnabled 為 true 時,只要關聯的進程離開等待狀態,系統便暫時提升該線程的優先級。 此操作可防止其他進程中斷當前線程的處理。 PriorityBoostEnabled 設置影響所有現有線程及該進程隨后創建的所有線程。 若要還原正常行為,請將 PriorityBoostEnabled 屬性設置為 false。

僅當線程運行在一個將 PriorityClass 設置為動態優先級枚舉值之一(Normal、High 或 RealTime)時,PriorityBoostEnabled 才有效。

4、睡眠與阻塞
Sleep(Int32)將當前線程掛起指定的時間。
注意參數為線程被阻塞的毫秒數

Imports System.ThreadingClass ExampleShared Sub Main()For i As Integer = 0 To 4Console.WriteLine("Sleep for 2 seconds.")Thread.Sleep(2000)NextConsole.WriteLine("Main thread exits.")End Sub End Class

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。