- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程技术在串口通信中的应用尹德春(西华师范大学计
电子发烧友 电子技术论坛
多线程技术在串口通信中的应用
尹德春(西华师范大学计算机系,四川南充 637002 )
摘要:首先介绍了多线程技术的基本原理,然后讨论了多线程技术在串口通信中的应用,并
给出了实现的方法和步骤。
关键词:多线程;串口通信;事件对象;delphi
中图分类号:TP311 文献标识码:A
Application of Multithread Technology on Serial Communication
Yin Dechun(Department of Computer Science, China West Normal University, Nanchong 637002)
Abstract This article illustrates the basic theory of multithread,then discusses
its application on serial communication ,and presents a general way and step of
implementation.
Key words Multithread; Serial Communication; Event Object;Delphi
1 引言
串口是计算机与外部串行设备之间常用的数据传输通道,在很多工业控制系统中,通常
要求系统具有实时计算能力,能够满足高效中断处理、多任务和通信的需要。而将Windows
多线程技术应用于串口通讯中,使得应用程序能同时执行不同的任务,降低了数据丢失率,
提高了系统可靠性,并且提高了资源的利用率和系统的整体性能。
2 Windows的多线程技术
在串口通信过程中,采用基于Windows多任务环境下的多线程技术,操作系统会将CPU时
间划分成许多时间片段,并按一定的优先级将时间片段分配给各个线程,各线程在各自的时
间片段内共享CPU,从而实现了微观上轮次执行,宏观上并发运行的多任务机制。
多线程应用系统的设计包含创建线程、线程同步、终止线程3部分,其中关键是要处理好
线程之间的同步问题,以避免线程之间出现资源竞争而引起几个线程甚至整个系统的死锁。
现在的操作系统提供了许多安全、高级的线程同步控制方法,以Win32系统为例,系统提供
了同步对象来协调多线程的执行,同步对象有:事件对象(Event Object),冲突区(Critical
Section),信号量(Semaphore)和互斥(Mutex)。
其中事件对象用来标志某个事件是否发生,从而确定是否执行某个线程。当一个线程在
执行某项任务之前,需要等待某一事件发生的时候,使用事件对象非常方便。它是靠自身是
否处于有信号状态以表明共享数据是否可访问,从而达到多线程间同步的目的。
本文采用事件对象来实现各个线程的同步。在没有预定事件时,输出处理线程、输入处
理线程和其他处理线程挂起以消耗尽量少的资源,监视线程检测到有预定事件时,用一事件
对象通知主线程,请求相应的处理。主线程接收到发送来的消息,自己处理或者唤醒相应的
线程处理程序,使信号得到实时处理。
3 串口通信的原理和机制
3.1 串口的打开和关闭
串口的打开是通过CreateFile完成的,该函数用于创建或打开文件、通道、通信资源。
要打开重叠I/O,则应该指定FILE_FLAG_OVERLAPPED属性。使用重叠方式的时候,费时的I/O
操作在后台进行,主线程则完成别的事情而不用担心效率会降低。
通过调用CloseHandle函数来关闭串口占用的内存句柄,释放相应的串口资源。
3.2 串口的初始化和配置
Windows用I/O缓冲区来暂存串口输入和输出的数据。一旦串口处于打开状态,Windows
就可以给串口分配接收和发送缓冲区。缓冲区的大小既可以缺省,也可以指定(调用
SetupComm函数)。如果通信速率较高,则应该设置较大的缓冲区大小。
配置串口需要设置串口通讯中特定事件的掩码(调用SetCommMask),只要串口中出现特
1
电子发烧友 电子技术论坛
定的消息,相应的事件掩码就会返回。
配置串口还需要设置串口通讯参
文档评论(0)