VB.NET并行与分布式编程(5)-线程状态与调整[1]
一、线程状态涉及的CLR类1)Process 类
提供对本地和远程进程的访问并使您能够启动和停止本地系统进程
?
GetCurrentProcess? 获取新的 Process 组件并将其与当前活动的进程关联。
?
2)ProcessThread 类Imports SystemImports System.ThreadingImports System.DiagnosticsImports System.Diagnostics.ThreadStateModule Module1 Sub Main() Dim mythread1 As Thread Dim mythread2 As Thread Dim mythread3 As Thread '创建线程对象 mythread1 = New Thread(AddressOf mythreadrun) mythread2 = New Thread(AddressOf mythreadrun) mythread3 = New Thread(AddressOf mythreadrun) Console.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程") '执行线程 mythread1.Start("线程1") mythread2.Start("线程2") mythread3.Start("线程3") '等待线程完成 mythread1.Join() mythread2.Join() mythread3.Join() '线程执行完毕 Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!") End Sub Public Sub mythreadrun(ByVal data As Object) Dim mynum As Integer 'GetCurrentProcess 获取新的 Process 组件并将其与当前活动的进程关联。 '分配一个新的槽,这个槽存放线程本地数据,槽名称为 'myjg,名称必须唯一 Dim jg As LocalDataStoreSlot jg = Thread.GetNamedDataSlot("myjg") Thread.SetData(jg, 30) Try For mynum = 1 To 10 Thread.SetData(jg, Thread.GetData(jg) - mynum) Console.WriteLine(Thread.CurrentThread.ManagedThreadId & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",计算结果为:" & Thread.GetData(jg)) '获取线程状态 Thread.Sleep(5) Dim value As ProcessThreadCollection Dim pt As ProcessThread value = Process.GetCurrentProcess().Threads For Each pt In value If pt.ThreadState = Wait Then Console.WriteLine(pt.Id & "等待原因:" & pt.WaitReason.ToString) End If Next Next Catch Console.WriteLine(data & " " & Now.ToLongTimeString & "线程异常终止!") '终止线程 Thread.CurrentThread.Abort() Finally Thread.FreeNamedDataSlot("myjg") End Try End SubEnd Module
?
4、运行效果
?
![VB.NET并行与分布式编程(五)-线程状态与调整[1]](http://img.reader8.net/uploadfile/jiaocheng/20140140/2731/2014012717311410779.jpg)
?
?对于等待原因来说,有以下几种:
我们需要使用ThreadWaitReason 枚举:
ThreadWaitReason 枚举
?
Executive? 线程正在等待计划程序。?
?FreePage? 线程正在等待可用的虚拟内存页。?
?PageIn? 线程正在等待虚拟内存页到达内存。?
?SystemAllocation? 线程正在等待系统分配。?
?ExecutionDelay? 线程执行延迟。?
?Suspended? 线程执行暂停。?
?UserRequest? 线程正在等待用户请求。?
?EventPairHigh? 线程正在等待事件对高。?
?EventPairLow? 线程正在等待事件对低。?
?LpcReceive? 线程正在等待本地过程调用到达。?
?LpcReply? 线程正在等待对本地过程调用的回复到达。?
?VirtualMemory? 线程正在等待系统分配虚拟内存。?
?PageOut? 线程正在等待虚拟内存页写入磁盘。?
?Unknown? 线程正在因未知原因而等待。?
?