我的编程空间,编程开发者的网络收藏夹
学习永远不晚

VB.NET编程多线程句柄技巧有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

VB.NET编程多线程句柄技巧有哪些

这篇文章给大家分享的是有关VB.NET编程多线程句柄技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

VB.NET编程经过长时间的发展,很多用户都很了解VB.NET编程中多线程程序。多线程成为大多程序员苦恼的事,现在和大家交流一下多线程。多线程是可行的,因为操作系统是多任务的,它有模拟同一时刻运行多个应用程序的能力。尽管多数个人计算机只有一个处理器,但是现在的操作系统还是通过在多个执行代码片断之间划分处理器时间提供了多任务。线程可能是整个应用程序,但通常是应用程序可以单独运行的一个部分。操作系统根据线程的优先级和离最近运行的时间长短给每一个线程分配处理时间。多线程对于时间密集型事务(例如文件输入输出)应用程序的性能有很大的提高。VB.NET编程中通常使用三类等待句柄:互斥对象、ManualResetEvent和AutoResetEvent。后两种通常用于同步事件。

1.互斥对象

互斥对象都是同步对象,它们只能在一个时刻由一个线程拥有。实际上,互斥这个名字衍生自互斥对象的所有权是相互排斥的。当线程请求独占访问某种资源时,它们请求互斥对象的所有权。因为在某个时刻只有一个线程能拥有一个互斥对象,其它线程在使用资源前必须等待互斥对象的所有权。WaitOne方法引发一个调用线程等待互斥对象的所有权。如果拥有互斥对象的线程正常终止,该互斥对象的状态就被设置为signaled,下一个线程获得它的所有权。

2.同步事件

同步事件用于通知其它的线程发生了某种事情或者某种资源可用。不要被它使用了"事件"这个词迷惑了。同步事件与其它的VisualBasic事件不同,它是真正的等待句柄。与其它的等待句柄类似,同步事件有两种状态signaled 和nonsignaled。调用同步事件的某个等待方法的线程必须等待,直到其它线程调用Set方法给事件发信号。有两个同步事件类。线程使用Set方法把ManualResetEvent实例的状态设置为signaled。线程使用Reset方法或控制返回等待WaitOne调用把实例的状态设置为nonsignaled。AutoResetEvent类的实例也可以使用Set设置为signaled,但是只要通知等待线程事件变为signaled,它们自动返回到nonsignaled。

下面的例子使用AutoResetEvent类同步线程池事务。

SubStartTest()  DimATAsNewAsyncTest()  AT.StartTask()  EndSub  ClassAsyncTest  PrivateSharedAsyncOpDoneAsNewSystem.Threading.AutoResetEvent(False)  SubStartTask()DimTpoolAsSystem.Threading.ThreadPoolDimargAsString="SomeArg" Tpool.QueueUserWorkItem(NewSystem.Threading.WaitCallback(_AddressOfTask),arg)'对一个事务进行排队  AsyncOpDone.WaitOne()'等待该线程调用SetMsgBox("Threadisdone.")  EndSubSubTask(ByValArgAsObject)  MsgBox("Threadisstarting.")  System.Threading.Thread.Sleep(4000)'等待4秒.  MsgBox("Thestateobjectcontainsthestring"&CStr(Arg))  AsyncOpDone.Set()'发信号表明该线程完成了  EndSub  EndClass

3.监视对象和同步锁

监视对象确保代码块的运行不被运行在其它线程中的代码打断。换句话说,其它线程中的代码不能运行,直到被同步的代码块结束。在VisualBasic .NET中使用SyncLock关键字来简化监视对象的访问。在VisualC# .NET中使用Lock关键字。

例如,假定你有一个程序,它重复地、异步读取数据并显示结果。使用优先多任务操作系统,正在运行的线程可以因为操作系统允许其它的线程运行而被打断。如果没有同步,数据正在显示时,显示数据的对象被其它的线程修改,有可能得到的是部分更新的数据视图。SyncLock保证一段代码持续运行,不被打断。下面的例子显示了怎样使用SyncLock给显示过程提供数据对象的独占访问。

ClassDataObject  PublicObjTextAsString  PublicObjTimeStampAsDate  EndClassSubRunTasks()  DimMyDataObjectAsNewDataObject()  ReadDataAsync(MyDataObject)  SyncLockMyDataObject  DisplayResults(MyDataObject)  EndSyncLock  EndSub  SubReadDataAsync(ByRefMyDataObjectAsDataObject)'添加异步读取和处理数据的代码  EndSubSubDisplayResults(ByValMyDataObjectAsDataObject)'添加显示结果的代码  EndSub

Interlocked类

你可以使用Interlocked类的方法防止多个线程同时更新或比较同一个值的问题发生。这个类的方法让你安全地增加、减少、交换和比较来自任何线程的值。下面的例子演示了怎样使用Increment方法增加一个运行在独立线程上的多个过程共享的变量的值。

SubThreadA(ByRefIntAAsInteger)  System.Threading.Interlocked.Increment(IntA)  EndSub  SubThreadB(ByRefIntAAsInteger)  System.Threading.Interlocked.Increment(IntA)  EndSub

ReaderWriter锁

在有些情况下,你可能希望只在写数据时锁定资源,在数据没有更新完前允许多个客户同时读数据。某个线程正在修改资源时,ReaderWriterLock类加强了对该资源的独占访问,但是允许读取资源的非独占访问。ReaderWriter锁是排他锁的一个有用的备选方案,排他锁引起其它线程等待,即使这些线程不需要更新数据。下面的例子演示了怎样使用ReaderWriter调整来自多个线程的读和写操作。

ClassReadWrite  'ReadData和WriteData方法可以被多个线程安全地调用  PublicReadWriteLockAsNewSystem.Threading.ReaderWriterLock()  SubReadData()'这个过程从数据源读取信息。在允许其它线程调用ReadData时,读取锁放置任何数据写入直到读取完成  ReadWriteLock.AcquireReaderLock(System.Threading.Timeout.Infinite)Try'此处执行数据操作  FinallyReadWriteLock.ReleaseReaderLock()'释放读取锁  EndTry  EndSubSubWriteData()'这个过程向数据源写信息。写入锁防止数据被读取或者写入知道线程完成写操作。  ReadWriteLock.AcquireWriterLock(System.Threading.Timeout.Infinite)Try'此处执行写操作  FinallyReadWriteLock.ReleaseWriterLock()'释放写入锁  EndTry  EndSub  EndClass

感谢各位的阅读!关于“VB.NET编程多线程句柄技巧有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

VB.NET编程多线程句柄技巧有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

VB.NET编程多线程句柄技巧有哪些

这篇文章给大家分享的是有关VB.NET编程多线程句柄技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。VB.NET编程经过长时间的发展,很多用户都很了解VB.NET编程中多线程程序。多线程成为大多程序员苦恼
2023-06-17

VB.NET Object Oriented编程技巧有哪些

小编给大家分享一下VB.NET Object Oriented编程技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!VB.NET Object Orient
2023-06-17

VB.NET中Object Oriented编程技巧有哪些

小编给大家分享一下VB.NET中Object Oriented编程技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!内功心法一:首先就是要写一个最基本Cla
2023-06-17

C++编程技巧有哪些

这篇文章主要讲解了“C++编程技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++编程技巧有哪些”吧!1.调试标记适用预处理#define定义一个或多个调试标记,在代码中把调试部分
2023-06-17

Perl编程技巧有哪些

本篇内容介绍了“Perl编程技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Perl是一种功能丰富的计算机程序语言,运行在超过100
2023-06-27

Java编程技巧有哪些

小编给大家分享一下Java编程技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.使用HashSet判断主键是否存在HashSet实现Set接口,由哈希表
2023-06-05

delphi编程技巧有哪些

- 使用面向对象的编程思想,将代码划分为多个类和模块,提高代码的可维护性和重用性。- 使用事件驱动的编程模式,通过事件和事件处理程序来实现程序的交互和响应。- 使用异常处理机制,对可能出现的错误进行捕获和处理,提高程序的稳定性和可靠性。-
2023-09-20

VB.NET如何实现多线程编程技术

这篇文章将为大家详细讲解有关VB.NET如何实现多线程编程技术,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。传统的VB.NET多线程编程开发人员已经建立了同步应用程序,在这些程序中事务按顺序执行。尽管由于
2023-06-17

C++的编程技巧有哪些

这篇文章主要介绍“C++的编程技巧有哪些”,在日常操作中,相信很多人在C++的编程技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的编程技巧有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-17

Python的编程技巧有哪些

以下是一些Python编程的技巧:1. 使用列表推导式:列表推导式是一种简洁的方式来创建列表。它可以通过迭代一个可迭代对象,并根据条件生成新的列表。例如:[x**2 for x in range(10) if x%2 == 0]2. 使用生
2023-09-25

C#的Excel编程技巧有哪些

小编给大家分享一下C#的Excel编程技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.C#的Excel程序设计及运行环境(1).微软视窗2000 服务
2023-06-17

Python编程代码技巧有哪些

本篇内容介绍了“Python编程代码技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 提供了一组独特的工具和语言特性来使
2023-06-17

Visual Studio 2008编程技巧有哪些

Visual Studio 2008编程技巧有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。学习Visual Studio 2008编程时,首先碰到的就是环境的配置。以前学
2023-06-17

Python编程常用技巧有哪些

这篇文章主要介绍“Python编程常用技巧有哪些”,在日常操作中,相信很多人在Python编程常用技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python编程常用技巧有哪些”的疑惑有所帮助!接下来
2023-06-16

Python最佳编程技巧有哪些

这篇文章主要介绍“Python最佳编程技巧有哪些”,在日常操作中,相信很多人在Python最佳编程技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python最佳编程技巧有哪些”的疑惑有所帮助!接下来
2023-06-02

VB.NET拆分合并语句的应用技巧有哪些

这篇文章将为大家详细讲解有关VB.NET拆分合并语句的应用技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。VB.NET编程语言的用法灵活,多样化,极大的满足了开发人员在编程中的特殊需
2023-06-17

Python新版本有哪些编程技巧

这篇文章主要介绍“Python新版本有哪些编程技巧”,在日常操作中,相信很多人在Python新版本有哪些编程技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python新版本有哪些编程技巧”的疑惑有所帮助!
2023-06-16

shell编程中的小技巧有哪些

这篇文章将为大家详细讲解有关shell编程中的小技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、打印一些头信息command << dilimiter…………dilimiter以分界符号d
2023-06-09

ADO.NET数据库编程技巧都有哪些

ADO.NET数据库编程技巧都有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ADO.NET数据库编程比较复杂,名目繁多的类、对象、属性、方法让每一个编程者都感觉恼火。本文
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录