Qt5.5中使用serialport类使得Ui界面很卡

实际的读取串口工作中出现了这种情况,经过分析问题,可能有以下几个原因。
第一 ,在timer(out)信号触发的readData事件内,出现了非常复杂的循环,程序逻辑问题带来的时间复杂度的增加。
第二,readdata的数据量过大,也就是缓冲去buffer的长度太大了,每个循环中读入的实际数据量远小于maxsize,因此程序就会在forever循环中不停的循环读入数据装入buffersize直到其装满为止。
第三,最容易引起Ui界面卡的原因,就是设置的串口Comm的waitforreadyread(timeout)过大,以至于read动作一直在timeout时间内等待数据的到来,程序处理在这里暂停了timeout时间,这个timeout时间如果超过0.5s,Ui界面自然就卡的不行。

当然,使用waitforreadyread使得Ui变得非常卡的原因就是这个函数阻塞了当前线程。

以下是Qt QIODevice类中有关于这个函数的文档:
bool QIODevice::waitForReadyRead(int msecs)

Blocks until new data is available for reading and the readyRead() signal has been emitted, or until msecs milliseconds have passed. If msecs is -1, this function will not time out.

Returns true if new data is available for reading; otherwise returns false (if the operation timed out or if an error occurred).

This function can operate without an ev

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值