- 浏览: 4400829 次
- 性别:
- 来自: 湛江
博客专栏
-
SQLite源码剖析
浏览量:80078
-
WIN32汇编语言学习应用...
浏览量:70064
-
神奇的perl
浏览量:103366
-
lucene等搜索引擎解析...
浏览量:285840
-
深入lucene3.5源码...
浏览量:15015
-
VB.NET并行与分布式编...
浏览量:67583
-
silverlight 5...
浏览量:32157
-
算法下午茶系列
浏览量:45995
文章分类
最新评论
-
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 1791Dim mypic As PictureBox = my ... -
VB.NET并行与分布式编程(11)-重叠 I/O
2012-06-07 17:12 2156NativeOverlapped 结构 提供一种显式布局,它 ... -
VB.NET并行与分布式编程(10)-关于栅栏
2012-06-07 11:11 1449一、临界域 Thread.BeginCriticalRegi ... -
VB.NET并行与分布式编程(9)-异步编程设计模式
2012-06-07 10:49 3718一、并行基础 许多个人计算机和工作站都有两个或四个内核( ... -
VB.NET并行与分布式编程(8)-net 分布式计算环境
2012-06-06 17:35 1839更多请看 http://msdn.m ... -
VB.NET并行与分布式编程(7)-线程池[2]
2012-06-06 17:12 1927在此,我们仅以GetAvailableThreads为例: ... -
VB.NET并行与分布式编程(7)-线程池[1]
2012-06-05 17:30 3938一、CLR线程池管理2类线程 1、普通的工作线程 1)使用 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[18]
2012-06-05 15:07 1758一、RegisterWaitForSingleObje ... -
VB.NET并行与分布式编程(6)-线程与内核同步[17]
2012-06-04 17:01 1468ReaderWriterLockSlim.EnterUpgra ... -
VB.NET并行与分布式编程(6)-线程与内核同步[16]
2012-06-04 15:44 1402Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[15]
2012-06-04 12:02 1358ReaderWriterLockSlim类是.NET框架提供的 ... -
vb.net 计算组合
2012-06-01 09:08 1350Private Function compute(ByVa ... -
vb.net 之arraylist
2012-05-24 17:29 3302'读文件 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[14]
2012-05-18 10:21 1985Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[13]
2012-05-17 15:46 1500Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[12]
2012-05-17 12:18 1656我们还可以使用信号量来完成同步 Semaphore ... -
VB.NET并行与分布式编程(6)-线程与内核同步[11]
2012-05-15 17:45 1372Imports System Imports System. ... -
VB.NET并行与分布式编程(6)-线程与内核同步[10]
2012-05-15 15:22 1830E)代码分析 上节代码是最简单的异步调用代码,即调用委托的 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[9]
2012-05-15 11:50 14693)使用委托的异步调用实现多线程的参数转入和传出 A)基础知 ... -
VB.NET并行与分布式编程(6)-线程与内核同步[8]
2012-05-11 11:05 16152)我们可以用更好的方式使用.NET的委托和线程池 A)委托 ...
相关推荐
7. **多线程编程**:讨论在.NET中进行并发和并行编程的方法,如Thread类、Task类,以及锁、Monitor、Mutex、Semaphore等同步机制。 8. **ASP.NET Web开发**:如果PPT深入到Web应用开发,可能会涵盖ASP.NET的基础...
2. **VB.NET 与Excel交互**:VB.NET 提供了Microsoft.Office.Interop.Excel命名空间,允许开发者使用VB.NET代码操作Excel文件。这包括创建、读取、修改和保存Excel工作簿和工作表。例如,可以创建一个新的Excel工作...
5. 并发编程:VB.NET支持多线程编程,可以使用Thread类创建和管理线程。Task类和Parallel类提供了异步编程和并行处理的能力,利用多核处理器提升程序性能。VB.NET还引入了async/await关键字,简化了异步编程的复杂度...
《VB.NET应用集锦例程源代码》是一个包含多个VB.NET工程实例的资源包,旨在帮助学习者深入了解和掌握VB.NET编程技术。这个资源包包括了五个不同的项目源代码,覆盖了VB.NET的基础到进阶应用,对于计算机专业的学生...
VB.NET是Microsoft开发的一种编程语言,它是Visual Basic的.NET版本,设计用于构建Windows应用程序、Web应用程序和分布式系统。本资源“vb.net中高级篇.rar”显然聚焦于VB.NET的进阶概念和技术,对于想要深入理解和...
5. **并发与同步**:使用异步编程模型(如async/await关键字)处理并发请求,保证多个通信任务的并行处理。 6. **状态管理**:实现用户状态的管理,如在线、离线、忙碌等,便于判断能否进行通话。 **三、应用拓展...
### .NET下的多线程与并行计算:深入解析与应用 #### 一、引言 随着计算机硬件的发展,特别是多核处理器的普及,多线程和并行计算已成为现代软件开发不可或缺的一部分。本文旨在探讨.NET框架下多线程与并行计算的...
5. **并发和多线程**:讲解TPL和并发编程概念,帮助开发者利用多核处理器优势,编写高效的应用。 6. **ASP.NET和Windows Forms**:讨论如何使用VB2010开发Web应用程序和桌面应用程序,包括UI设计、数据绑定和状态...
9. **并发与多线程**:VB 2008提供了对多核处理器和并发编程的支持,包括线程同步、异步编程和并行 LINQ。 10. **调试与性能优化**:介绍Visual Studio 2008中的调试工具,以及如何分析和优化代码性能。 这本书还...
- VB.NET:另一种.NET语言,语法与Visual Basic类似,但完全基于.NET框架。 - F#:函数式编程语言,也可在.NET框架上运行。 3. **ASP.NET** - ASP.NET是.NET框架的一部分,用于构建Web应用程序。主要版本有ASP...
VB.NET则引入了多线程并行计算的支持,利用了多核处理器的优势,提高了程序执行速度。 其次,.NET Framework 4.0中的Common Language Runtime (CLR)进行了优化,提高了内存管理效率,降低了垃圾回收的开销。同时,...
2. VB.NET:另一种流行的.NET语言,语法与VB6类似,但支持.NET框架的所有功能。 3. F#:函数式编程语言,也可用于.NET开发,适合处理数据科学和并行计算任务。 三、ASP.NET 1. ASP.NET Web Forms:基于控件的模型,...
7. **并发与多线程**:VS.NET提供了对多核处理器和异步编程的良好支持。案例可能包括如何创建并管理线程,使用任务并行库(TPL)进行并发编程,以及处理锁和同步问题。 8. **Azure云服务**:VS.NET可以用于开发Azure...
4. **多线程(Multithreading)**: 学习如何在.NET中创建和管理线程,实现并行计算。 5. **WCF(Windows Communication Foundation)**: 微软的服务导向架构框架,用于构建分布式系统。 6. **.NET框架安全性(.NET...
8. **并行编程和Task Parallel Library (TPL)**:.NET 4.0引入了对多核处理器更充分的利用,通过TPL提供了并行编程的支持,使开发者能编写高性能的多线程应用程序。 9. **内存诊断工具**:.NET 4.0提供了诊断工具,...
6. **并发和多线程**:Visual C++.NET支持多线程编程,利用.NET Framework的ThreadPool和Task Parallel Library(TPL)可以方便地编写高效的并行代码,充分利用多核处理器的优势。 7. **单元测试和调试**:IDE内置...
- **多线程与并行计算**:学习如何在.NET中有效地管理和调度线程,以充分利用多核处理器的计算能力。 - **代码分析和性能调优工具**:使用Visual Studio和其他工具来识别和解决性能瓶颈,提高代码执行效率。 ### 4....
它包含一组全面的开发工具和库,支持多种编程语言,如C#、VB.NET、F#等。面试中,针对.NET的技术考察通常涵盖以下几个关键领域: 1. **基础概念**:了解.NET框架的基本构成,如CLR(Common Language Runtime)——...
2. **C# 4.0 和 VB.NET 10.0**:这两个编程语言随着.NET Framework 4一同发布,引入了新的特性,如动态类型、命名参数、可空引用类型和多目标框架支持。 3. **WCF(Windows Communication Foundation)**:这个组件...
2. **C#,VB.NET,F#等编程语言**:.NET Framework支持多种编程语言,开发者可以根据需求选择合适的语言进行开发。 3. **类库**:.NET Framework提供了丰富的类库,如System命名空间,包含大量预定义的类,方便...