串口传输用不用使用多线程 为啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口传输用不用使用多线程 为啥相关的知识,希望对你有一定的参考价值。

主要是两个原因:
1、串口的通讯速率相对电脑来说是很慢的(最高110K,以太网都千兆了)。正常情况下,在等待下一个串口信号的间隙,操作系统已经完成了时间片轮转。多以不需要多线程。
2、标准串口是独占资源,所以除非是多个串口同时操作,在单串口上实现多线程运作效率会更低。因为必须在切换线程时考虑到释放独占资源,程序的复杂度也会呈几何级数上升,完全得不偿失。
参考技术A 异步串口可以不用,同步阻塞方式必须用,否则调用readfile writefile会阻塞线程,窗口就卡死了。。。
单线程用异步串口可以,但并不好,异步方式,窗口界面一般你还需要用个定时器,定时来查询通讯是否完成,何必这么麻烦,实时性又差。。。。
如果想实时性好一些,最好是阻塞方式,因为这样只要通讯完成,马上就退出阻塞,你就可以继续了,单独的线程又不干别的,阻塞也就阻了,主线程是有其他事情要做,窗口的所有操作都是主线程的事,如果阻塞了,窗口就死了。。。。
如果你用串口控件的话,也可以不用创建线程(控件替你创建好了),这就简单的多。。。。
参考技术B 除非你是计算机上同时存在多个串口需要操作(比如使用了多串口卡或者USB转串口集线器),可以考虑开多线程,否则没有必要。 参考技术C 需要,不然会阻塞其它处理,比如界面渲染。

以上是关于串口传输用不用使用多线程 为啥的主要内容,如果未能解决你的问题,请参考以下文章

socket 多线程 并发时会丢数据如何解决?

C# 中如何做多线程的串口通讯?

用java多线程实现服务器与客户端之间的文件传输的代码!!!急!!!!

为啥在python里推荐使用多进程而不是多线程

QT多发线程进行数据传输

C#多线程如何处理数据