• 6641阅读
  • 8回复

[提问]关于使用qextserialport通过串口接收大容量数据导致GUI失去响应的问题 [复制链接]

上一主题 下一主题
离线honestapple
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-11
我正在使用QT+QEXTSERIALPORT做一个数据采集上位机界面。下位机采用USB虚拟串口发送数据,数据传输率接近1MB/s。上位机使用QEXTSERIALPORT第三方串口类+多线程处理。参考代码:http://www.qtcentre.org/threads/21063-QextSerialPort-with-QTimer-approch-for-reading?p=103325&highlight=#post103325。
现在碰到一个十分棘手的问题,就是一旦上位机向下位机发送了采集数据命令之后,下位机开始不断的采集数据并以64字节大小的包向上位机发送,数据采集线程采用信号+槽的方式与主线程通讯,这样就是导致上位机GUI界面失去响应(有可能是GUI实时显示造成的,如果不做任何操作,GUI不会失去响应)。尝试了修改timeout无效。因为下位机是数据采集部分,需要保证较高的数据传输率,因此也不能降低数据传输率。主要困扰两个问题:
1. 究竟是什么原因导致了这种多线程情况下,GUI仍然失去响应。
2. 究竟该怎么处理这种情况。
求高手指点。
离线pxiao_xiao

只看该作者 1楼 发表于: 2013-03-11
“有可能是GUI实时显示造成的,如果不做任何操作,GUI不会失去响应”其中的不做任何操作是什么意思? 是实时显示时不做任何操作,还是这个不做任何操作是指串口无数据行为?
离线honestapple

只看该作者 2楼 发表于: 2013-03-12
是指串口接收线程正常接收数据,并正常发送信号,但是GUI线程在相应的槽函数里面什么也不做。实际上我就是想把数据显示在一个QTextBrowser里面,加上insertPlainText函数,GUI就不动了,啥也不干就好好的。
离线dbzhang800

只看该作者 3楼 发表于: 2013-03-12
QTextBrowser太笨重, 用在这种情况下是错误的,你应该首选 QPlainTextEdit,如果还不能满足要求,你需要找其他第三方的Widget,或者自己写一个满足要求的。
离线pxiao_xiao

只看该作者 4楼 发表于: 2013-03-12
insertPlainText()是将文本 Convenience slot that inserts text at the current cursor position. 当前的鼠标位置。
另外楼上说的你可以试试
离线honestapple

只看该作者 5楼 发表于: 2013-03-12
多谢,我试试看。
离线honestapple

只看该作者 6楼 发表于: 2013-03-12
试了一下,可以响应,但是有点慢。
离线zouyinhong
只看该作者 7楼 发表于: 2013-03-14
我现在也在做这个,遇到同样的问题,您可以给我发一下您的代码吗?我得邮箱269980027@qq.com 谢谢啦
离线dbzhang800

只看该作者 8楼 发表于: 2013-03-14
设置一下 QPlainTextEdit 的 maximumBlockCount 对性能会有很大的提升
快速回复
限100 字节
 
上一个 下一个