串口传输用不用使用多线程 为什么

串口传输用不用使用多线程 为什么,第1张

主要是两握缺个原因:

1、串口的通讯速率相对电脑来说是很慢的(最高110K,以太网都千兆闭皮梁了)。正常情况下,在等待下一个串口信号的间隙, *** 作系统已经完成了时间片轮转。多以不需要线程

2、标准串口是独占资源,所以除非是多个串口轿运同时 *** 作,在单串口上实现多线程运作效率会更低。因为必须在切换线程时考虑到释放独占资源,程序的复杂度也会呈几何级数上升,完全得不偿失。

16位串神扰口应用程序中,使用雀誉的16位的Windows API通信函数:

①OpenComm()打开串口资源,并指定输入、输出缓游岁旦冲区的大小(以字节计)

CloseComm() 关闭串口

例:int idComDev

idComDev = OpenComm("COM1", 1024, 128)

CloseComm(idComDev)

1)一般的来说,要保证实时性(接收实时性以及发送的实时性),对串口 *** 作采用多线程:一个线程负责接收;另一个线程负责发送。

2)在 .Net类库中 System.IO.Ports.SerialPort就是采用这种方案:即无论你程序是否启动额外线程来处理窗口接收与发送,System.IO.Ports.SerialPort类都是按照多线程方式工作!备圆早

3)在MSDN关于SerialPort 类的文档中,请注意SerialPort类有个属性BaseStream。这个属性用于显式异步 I/O *** 作,即多线程方式 *** 作串口

4)同样,在MSDN文档中关于SerialPort.DataReceived 事件的说明中有这么一句话:“……从 SerialPort 对仿雀象接收数据时,将在辅助线程上引发 DataReceived 事件……”,意思很明白:DataReceived事件是在主线程之外的另一个辅助线程上引发的!

====

说了这么多,结论很简单:

串口通讯绝对适合使用多线程编程,因为System.IO.Ports.SerialPort本身就支持多线程 *** 作;当然,你完全可以绕开System.IO.Ports.SerialPort提供的多线程机制,实现自己腔陪的单线程输入与输出 *** 作。除非你有你特定的需求,这样做显然不是上策。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12422700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存