- 浏览: 4331878 次
- 性别:
- 来自: 湛江
博客专栏
-
SQLite源码剖析
浏览量:79401
-
WIN32汇编语言学习应用...
浏览量:68342
-
神奇的perl
浏览量:101467
-
lucene等搜索引擎解析...
浏览量:281106
-
深入lucene3.5源码...
浏览量:14595
-
VB.NET并行与分布式编...
浏览量:65531
-
silverlight 5...
浏览量:31305
-
算法下午茶系列
浏览量:45182
文章分类
最新评论
-
yoyo837:
counters15 写道目前只支持IE吗?插件的东西是跨浏览 ...
Silverlight 5 轻松开启绚丽的网页3D世界 -
shuiyunbing:
直接在前台导出方式:excel中的单元格样式怎么处理,比如某行 ...
Flex导出Excel -
di1984HIT:
写的很好~
lucene入门-索引网页 -
rjguanwen:
在win7 64位操作系统下,pygtk的Entry无法输入怎 ...
pygtk-entry -
ldl_xz:
http://www.9958.pw/post/php_exc ...
PHPExcel常用方法汇总(转载)
Imports System Imports System.Threading Imports System.Diagnostics Imports System.Diagnostics.ThreadState Module 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 '分配一个新的槽,这个槽存放线程本地数据,槽名称为 '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) Else Console.WriteLine(pt.Id & "=>线程状态:" & pt.ThreadState.ToString) End If Next Next Catch Console.WriteLine(data & " " & Now.ToLongTimeString & "线程异常终止!") '终止线程 Thread.CurrentThread.Abort() Finally Thread.FreeNamedDataSlot("myjg") End Try End Sub End Module
我们在上面代码中加入了线程状态的输出
Console.WriteLine(pt.Id & "=>线程状态:" & pt.ThreadState.ToString)
在上一节和本节的上面代码中,与线程状态与调度有关的核心代码如下 :
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)
Else
Console.WriteLine(pt.Id & "=>线程状态:" & pt.ThreadState.ToString)
End If
Next
其中
1)得到当前进程的所有线程集合:
value = Process.GetCurrentProcess().Threads
2)在线程集合中迭代
For Each pt In value
.......
next
3)判断该线程的状态是不是等待
If pt.ThreadState = Wait Then
4)等待原因
Console.WriteLine(pt.Id & "=>等待原因:" & pt.WaitReason.ToString)
注意pt.WaitReason和pt.ThreadState 都是枚举值,因此在前面
Imports System.Diagnostics.ThreadState
5)如果线程没有处于等待状态,则输出线程的当前状态
Console.WriteLine(pt.Id & "=>线程状态:" & pt.ThreadState.ToString)
6)pt.Id为获取线程的唯一标识符,ManagedThreadId 属性的值是一个整数,表示此托管线程的唯一标识符,不会随时间而变化,即使承载公共语言运行时的非托管代码将线程实现为纤程。
2、线程的名字可以使用Thread.Name ,它 是包含线程名称的字符串类型的 属性
我们把上面的代码改一下,加入thread.Name,不再像以前那样通过 mythread1.Start("线程1")
传入一个字符串参数进入线程,让线程内部知道它的名字
Imports System Imports System.Threading Imports System.Diagnostics Imports System.Diagnostics.ThreadState Module 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) mythread1.Name = "thread_1" mythread2.Name = "thread_2" mythread3.Name = "thread_3" Console.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程") '执行线程 mythread1.Start() mythread2.Start() mythread3.Start() '等待线程完成 mythread1.Join() mythread2.Join() mythread3.Join() '线程执行完毕 Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!") End Sub Public Sub mythreadrun() Dim mynum As Integer '分配一个新的槽,这个槽存放线程本地数据,槽名称为 '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.Name & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",计算结果为:" & Thread.GetData(jg)) Thread.Sleep(5) Next Catch Console.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "线程异常终止!") '终止线程 Thread.CurrentThread.Abort() Finally Thread.FreeNamedDataSlot("myjg") Console.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "线程运行完毕!") End Try End Sub End Module
下面我们可以进一步改进,输出进程名称,并将当前进程做为参数传入线程
Imports System Imports System.Threading Imports System.Diagnostics Imports System.Diagnostics.ThreadState Module 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) mythread1.Name = "thread_1" mythread2.Name = "thread_2" mythread3.Name = "thread_3" Console.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程") Dim myprocess As Process = Process.GetCurrentProcess() Console.WriteLine("进程名称:" & myprocess.ProcessName) '执行线程 mythread1.Start(myprocess) mythread2.Start(myprocess) mythread3.Start(myprocess) '等待线程完成 mythread1.Join() mythread2.Join() mythread3.Join() '线程执行完毕 Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!") End Sub Public Sub mythreadrun(ByVal myprocess As Object) Dim mynum As Integer Dim value As ProcessThreadCollection Dim pt As ProcessThread '分配一个新的槽,这个槽存放线程本地数据,槽名称为 'myjg,名称必须唯一 Dim jg As LocalDataStoreSlot jg = Thread.GetNamedDataSlot("myjg") Thread.SetData(jg, 100) Try For mynum = 1 To 10 Thread.SetData(jg, Thread.GetData(jg) - mynum) Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",计算结果为:" & Thread.GetData(jg)) Thread.Sleep(50) value = myprocess.Threads For Each pt In value If pt.ThreadState = Wait Then Console.WriteLine(pt.Id & "=>等待原因:" & pt.WaitReason.ToString) Else Console.WriteLine(pt.Id & "=>线程状态:" & pt.ThreadState.ToString) End If Next Next Catch Console.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "线程异常终止!") '终止线程 Thread.CurrentThread.Abort() Finally Thread.FreeNamedDataSlot("myjg") Console.WriteLine(Thread.CurrentThread.Name & " " & Thread.CurrentThread.Priority.ToString) Console.WriteLine(Thread.CurrentThread.Name & " " & Now.ToLongTimeString & "线程运行完毕!") End Try End Sub End Module
注意以上代码的下面几个部分
1)
Public Sub mythreadrun(ByVal myprocess As Object)
2) Dim myprocess As Process = Process.GetCurrentProcess()
Console.WriteLine("进程名称:" & myprocess.ProcessName)
'执行线程
mythread1.Start(myprocess)
mythread2.Start(myprocess)
mythread3.Start(myprocess)
发表评论
-
vb.net-picturebox输出文本
2012-07-17 17:33 1720Dim mypic As PictureBox = my ... -
VB.NET并行与分布式编程(11)-重叠 I/O
2012-06-07 17:12 2089NativeOverlapped 结构 提供一种显式布局,它 ... -
VB.NET并行与分布式编程(10)-关于栅栏
2012-06-07 11:11 1407一、临界域 Thread.BeginCriticalRegi ... -
VB.NET并行与分布式编程(9)-异步编程设计模式
2012-06-07 10:49 3634一、并行基础 许多个人计算机和工作站都有两个或四个内核( ... -
VB.NET并行与分布式编程(8)-net 分布式计算环境
2012-06-06 17:35 1789更多请看 http://msdn.m ... -
VB.NET并行与分布式编程(7)-线程池[2]
2012-06-06 17:12 1857在此,我们仅以GetAvailableThreads为例: ... -
VB.NET并行与分布式编程(7)-线程池[1]
2012-06-05 17:30 3872一、CLR线程池管理2类线程 1、普通的工作线程 1)使用 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[18]
2012-06-05 15:07 1701一、RegisterWaitForSingleObje ... -
VB.NET并行与分布式编程(6)-线程与内核同步[17]
2012-06-04 17:01 1416ReaderWriterLockSlim.EnterUpgra ... -
VB.NET并行与分布式编程(6)-线程与内核同步[16]
2012-06-04 15:44 1351Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[15]
2012-06-04 12:02 1315ReaderWriterLockSlim类是.NET框架提供的 ... -
vb.net 计算组合
2012-06-01 09:08 1297Private Function compute(ByVa ... -
vb.net 之arraylist
2012-05-24 17:29 3236'读文件 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[14]
2012-05-18 10:21 1920Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[13]
2012-05-17 15:46 1441Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[12]
2012-05-17 12:18 1603我们还可以使用信号量来完成同步 Semaphore ... -
VB.NET并行与分布式编程(6)-线程与内核同步[11]
2012-05-15 17:45 1312Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[10]
2012-05-15 15:22 1759E)代码分析 上节代码是最简单的异步调用代码,即调用委托的 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[9]
2012-05-15 11:50 14043)使用委托的异步调用实现多线程的参数转入和传出 A)基础知 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[8]
2012-05-11 11:05 15572)我们可以用更好的方式使用.NET的委托和线程池 A)委托 ...
相关推荐
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt ...浅述WinForm多线程编程与Control.Invoke的应用.txt 微软.Net开发中的多线程编程总结.txt 线程中的参数传递.txt
VB.NET多线程编程技术--大量提高应用程序的性能[收集].pdf
vb.net2010数据库编程基础教程-数据绑定,使用控件方式连接数据库,图文教程
VB.NET判断网络连接状态
VB.NET应用教程第2版-童爱红-数据包 书本内的全部代码!
用VB.NET写的小计算器,之前看到一个,不过发现那个BUG挺多的,就自己写了一个,呵呵,仅供参考。打开里面的Caculate.vbproj文件,即可看到源代码。
使用VB.NET对PLC进行读写数据,方便快捷,对入门者有很好的编程
第8章-VB.NET与数据库应用程序10-10-25
AUTOCAD VBA&VB.NET开发基础与实例教程 c#
VB.net设计模式高级编程这本书的源码,网上已经找不到,特发出来共享。
vb.net多线程例子 ,创建了三个方法:TestMethod1, TestMethod2和TestMethod13,并且这三个方法功能相似,通过循环向输出设备输出
VB.NET实例解析应用编程 VB.NET实例解析应用编程 VB.NET实例解析应用编程
AUTOCAD VBA&VB.NET开发基础与实例教程 c#
第一部分 Visual Basic.net基础 第二部分 vb.net的语法部分 第三部分 visual basic.net的运算 第四部分 visual basic.net的常用控件 第六部分 vb.net的OOP...第八部分 vb.net的多线程 第九部分 vb.net的文件和出错处理
Developers guide to ASP.NET
VB.NET之SerialPort编程实例源码 直接使用
vb.net控件应用编程实例教程vb.net控件应用编程实例教程vb.net控件应用编程实例教程
VB.NET多线程编程 对于VB.NET的多线程进行了比较详细的解释
VB.NET高级篇教程
vb.net和sol server2000高级编程-创建高效数据层