• 6514阅读
  • 4回复

[提问]问一个多线程串口通讯的问题 [复制链接]

上一主题 下一主题
离线javiy
 
只看楼主 正序阅读 楼主  发表于: 2013-04-03
就是我想做一个程序,要打开3个串口,其中一个串口1是读取数据,另外2个串口,串口2和串口3把串口1接收到的数据转发出去。我想用多线程+定时来实现,请问就是这个思路是否可行?我如果是2个串口同时读取数据的话需要用什么类型的锁来保护?我初步的想法是用QReadWriteLock机制....但是查找资料,发现这方面的描述并不多....现在思路比较凌乱,有没有高人可以指点一二?
离线pxiao_xiao

只看该作者 4楼 发表于: 2013-04-04
串口不多 用信号-槽 设置第5个参数 用于异步
如果 用定时器查询 设置一个公共数据区 加锁访问 最好设置同一数据的访问次数 如果串口2和串口3同时发的数据是一样的
离线realfan

只看该作者 3楼 发表于: 2013-04-03
线程间数据共享和普通的访问数据没什么区别,比如把数据放到某个类的成员中,只要能访问这个对象的成员,就能读写数据,不论在哪个线程中。当然用全局变量也可以实现。

一个串口读,两个串口写。可以考虑用用QWaitCondition,循环读写缓充区数据。
锁是锁资源的,线程访问资源时,必须先经过锁,才能进行。锁不是线程的。
离线javiy
只看该作者 2楼 发表于: 2013-04-03
回 1楼(realfan) 的帖子
是指假设有串口1,2,3.串口2和串口3同时把一个串口1接收过来的数据发送出去,还有就是线程之间的数据是怎么共享?就是我在串口1设置一个变量,用接收来的数据对其赋值,也可以被串口2和3的线程读取。我翻了一下书,说可以用信号和槽。说到锁,是每一个线程都要定义一个锁吗?
离线realfan

只看该作者 1楼 发表于: 2013-04-03
多串口,多线程,没有问题,完全可行。
你的两个串口同时读数据,是指读两个串口,还是本地内存数据。如果是两个串口,在不同的线程中,相互独立,不用锁。
多个线程访问同一资源时,需要锁。一般情况,用QMutex就够用了,如果需要也可以配合QWaitCondition用
快速回复
限100 字节
 
上一个 下一个