- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.3 单个串口备数据的连续接收
学习情景2.3 单个串口设备数据的连续接收 2.3.3 相关知识 1 多线程技术概述 (1)线程的概念 Windows是一个抢占式多任务操作系统,在系统内核中提供了对多线程的支持,多线程技术可以让应用程序在一个耗时的操作中能够及时对用户操作进行响应,并且从宏观上达到多个任务“齐头并进”的目的 进程是应用程序的一个运行例程,是应用程序的一次动态执行过程。线程是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。每个进程至少需要一个执行线程,由系统自动创建,程序设计者可以根据需要创建其它线程。由于多个线程共享进程中的全局变量和系统资源,所以线程间的切换比较容易,通信也比较方便。 学习情景2.3 单个串口设备数据的连续接收 (2).NET Framework对多线程的支持 .NET平台库提供了Thread类对线程进行处理,该类包含在System.Threading命名空间中,程序中需要包含语句“using System.Threading;”。编程人员可以通过创建一个Thread类的实例来创建一个线程,并通过Thread类提供的方法对线程进行管理。Thread类的常用属性和方法如下表: 表2.3.1 Thread类的常用属性和方法 学习情景2.3 单个串口设备数据的连续接收 2 委托的概念和使用方法 C#中的委托的作用相当于C/C++中的函数指针,函数指针是一个函数的入口地址。必修使用函数指针的场合是:程序员A编写了函数f,该函数中需要执行另外一个参数和返回值已经确定,但名字暂时不能确定函数,所以给函数设置一个函数指针类型的形式参数;当程序员B使用函数f时,定义函数g,并把g的入口地址作为实际参数传递给函数f,这样就可以在f中执行函数g了。 线程的启动是使用函数指针的一个典型例子,在启动线程之前,先要给操作系统指明线程启动后执行哪一函数中包含的代码,这时就要把函数的指针传递给创建线程的函数。 回调(完成后通知)是使用函数指针的另外一个典型例子。如程序员A编写了负责接收网络数据的函数f1,程序员B编写了负责处理数据的函数f2,那么就可以把f2的函数指针作为参数传递给函数f1,当f1接收数据完毕后,自动调用f2。所以回调的特点是:站在程序员B的角度看,函数由自己编写,但是不由自己调用,且不知道什么时候被调用(因为网络速度有快有慢),函数编写者要做的就是把函数指针传递出去。 学习情景2.3 单个串口设备数据的连续接收 定义委托的关键字是delegate,它是从System.Delegate类派生出来的。例如: delegate int SomeDelegate(int p1,string p2); // int p1和string p2是被引用函数的参数类型和名称。其中参数类型和参数的个数必须和被引用函数的类型与个数一致。 3 创建和启动线程 一个线程必须和一个方法的入口(委托)关联起来,线程启动后,自动从该入口进入,执行函数体中包含的内容。 C#应用程序启动时,自动创建主线程,并进入Main方法开始执行,其它线程需要在程序里自己定义和启动。由于委托可以代表一个方法的入口 , 学习情景2.3 单个串口设备数据的连续接收 所以创建线程实例时只需要在Thread类的构造方法里传入一个委托实例即可,这个委托名叫ThreadStart,已经在线程命名空间中定义作了定义: public delegate void ThreadStart(); 所以创建线程方式如下: ThreadStart functionEntrance = new ThreadStart(threadFunction); Thread t = new Thread(functionEntrance); 在委托ThreadStart的构造方法里面传入的是方法名,这个方法可以是静态方法,也可以是某个对象的方法。线程对象创建后,我们就可以调用其Start方法开始线程的执行了。 学习情景2.3 单个串口设备数据的连续接收 我们可以在主线程里建立线程,也可以在线程里再创建线程,线程启动后会自动执行委托实例代表的方法,线程执行完后会自动销毁并释放其占用的资源。 在一个新线程中执行带参数的函数,操作步骤如下: ●定义线程函数: private void paramThreadFunction(object param) { //函数体 } ●用ParameterizedThreadStart委托封装线程函数: 学习情景2.3 单个串口设备数据的连续接收 ParameterizedThreadStart functionEntrance =
文档评论(0)