VB.NET并行与分布式编程(5)-线程状态与调整[4]
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 value pt.PriorityLevel = ThreadPriorityLevel.AboveNormal Next
此外,还可以设置线程动态优先级调整的开关
ProcessThread.PriorityBoostEnabled
当 PriorityBoostEnabled 为 true 时,只要关联的进程离开等待状态,系统便暂时提升该线程的优先级。 此操作可防止其他进程中断当前线程的处理。 PriorityBoostEnabled 设置影响所有现有线程及该进程随后创建的所有线程。 若要还原正常行为,请将 PriorityBoostEnabled 属性设置为 false。
仅当线程运行在一个将 PriorityClass 设置为动态优先级枚举值之一(Normal、High 或 RealTime)时,PriorityBoostEnabled 才有效。
4、睡眠与阻塞
Imports System.Threading Class Example Shared Sub Main() For i As Integer = 0 To 4 Console.WriteLine("Sleep for 2 seconds.") Thread.Sleep(2000) Next Console.WriteLine("Main thread exits.") End Sub End Class
Imports System.Threading Class Example Shared Sub Main() Dim interval As New TimeSpan(0, 0, 2) For i As Integer = 0 To 4 Console.WriteLine("Sleep for 2 seconds.") Thread.Sleep(interval) Next Console.WriteLine("Main thread exits.") End Sub End Class
mythread1.Start(myprocess) mythread2.Start(myprocess) mythread3.Start(myprocess) mythread1.Suspend() mythread2.Suspend() mythread3.Suspend() mythread1.Resume() mythread2.Resume() mythread3.Resume()