欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VB.NET并行与分布式编程(5)-线程状态与调整[4]

程序员文章站 2022-04-29 15:13:01
...

 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、睡眠与阻塞

Sleep(Int32)将当前线程挂起指定的时间。
注意参数为线程被阻塞的毫秒数
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

 
Sleep(TimeSpan)将当前线程阻塞指定的时间。
 
下面是关于msdn的阻塞的例子
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

 
5、挂起与恢复
        mythread1.Start(myprocess)
        mythread2.Start(myprocess)
        mythread3.Start(myprocess)
        mythread1.Suspend()
        mythread2.Suspend()
        mythread3.Suspend()

        mythread1.Resume()
        mythread2.Resume()
        mythread3.Resume()