Qt5串口打开问题

songhuirong1 2014-06-20 09:43:36
我用Qt5.3.0在centos上做串口开发,发现一个很奇怪的问题,就是当同时打开同一个串口时,如果第一次打开成功,第二次再打开这个串口时QSerialport的open函数就会被阻塞,在windows不会阻塞,不知道怎么回事儿?

QSerialPort sp1;
QSerialPort sp2;
QStringList ports;
QList<QSerialPortInfo> portinfo = QSerialPortInfo::availablePorts();

foreach(QSerialPortInfo info, portinfo)
ports << info.portName();

if(!ports.isEmpty())
{
sp1.setPortName(ports[0]);
sp1.open(QIODevice::ReadWrite);
sp2.setPortName(ports[0]);
sp2.open(QIODevice::ReadWrite);
}

sp1.open(QIODevice::ReadWrite);可以执行,但是执行到sp2.open(QIODevice::ReadWrite);时,代码就阻塞住了,有没有办法解决呀。
...全文
1119 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
songhuirong1 2014-06-26
  • 打赏
  • 举报
回复
引用 8 楼 gucunlin 的回复:
[quote=引用 7 楼 songhuirong1 的回复:] [quote=引用 6 楼 gucunlin 的回复:] 楼主可以先用isopen判断一下,再做open的动作。如果不是同一个类先想办法判断一下吧。
是否isOpen倒是由办法解决,但是这样做还还是感觉不爽。不知道Qt5的串口类怎么会这么做,让人想不通。[/quote] 你是要钻研Qt的串口类呢,还是想最快的速度解决问题呢[/quote] 问题要解决,想请教有没有更好的方法
songhuirong1 2014-06-25
  • 打赏
  • 举报
回复
引用 6 楼 gucunlin 的回复:
楼主可以先用isopen判断一下,再做open的动作。如果不是同一个类先想办法判断一下吧。
是否isOpen倒是由办法解决,但是这样做还还是感觉不爽。不知道Qt5的串口类怎么会这么做,让人想不通。
gucunlin 2014-06-25
  • 打赏
  • 举报
回复
楼主可以先用isopen判断一下,再做open的动作。如果不是同一个类先想办法判断一下吧。
gucunlin 2014-06-25
  • 打赏
  • 举报
回复
引用 7 楼 songhuirong1 的回复:
[quote=引用 6 楼 gucunlin 的回复:] 楼主可以先用isopen判断一下,再做open的动作。如果不是同一个类先想办法判断一下吧。
是否isOpen倒是由办法解决,但是这样做还还是感觉不爽。不知道Qt5的串口类怎么会这么做,让人想不通。[/quote] 你是要钻研Qt的串口类呢,还是想最快的速度解决问题呢
feilinhe 2014-06-24
  • 打赏
  • 举报
回复
Linux机制和windows不太一样,如果不是跨平台的话,LZ完全采用Linux下的I/O操作进行多次打开,应该是没问题的~
songhuirong1 2014-06-23
  • 打赏
  • 举报
回复
引用 3 楼 feilinhe 的回复:
不知道LZ为什么同时要打开串口两次??
如果仅仅是一个读一个写的话,两个串口打开的时候参数传递一个QIODevice::ReadOnly,一个QIODevice::WriteOnly试试?
不过貌似windows下好像同一进程里只能打开一次,本人记不太清了~

是我的项目里会碰到这个问题,我在开发一个硬件测试工具,在一个界面里可以打开所有的设备,在选择设备的时候有可能会选择同一个串口,这样子程序就阻塞了。

途中读卡器打开成功之后,这时如果扫描枪再去打开"COM2"的话,程序就会阻塞。这种情况在windows上不会阻塞,只在Linux上阻塞,但是公司的开发平台是centos。不知道如何解决呀,还望指点。
feilinhe 2014-06-22
  • 打赏
  • 举报
回复
不知道LZ为什么同时要打开串口两次?? 如果仅仅是一个读一个写的话,两个串口打开的时候参数传递一个QIODevice::ReadOnly,一个QIODevice::WriteOnly试试? 不过貌似windows下好像同一进程里只能打开一次,本人记不太清了~
songhuirong1 2014-06-22
  • 打赏
  • 举报
回复
引用 1 楼 qwer_boo 的回复:
是不是第一次打开后,串口被占用? 所以第二次就阻塞了
第一次打开是成功的,第二次再打开这个串口就阻塞了。
qwer_boo 2014-06-21
  • 打赏
  • 举报
回复
是不是第一次打开后,串口被占用? 所以第二次就阻塞了

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧