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

本文探讨了在Qt5.5中使用serialport类进行串口通信时,UI界面出现卡顿的问题。可能的原因包括:复杂的定时器事件处理循环、大数据量的读取操作以及设置过大的waitforreadyread超时时间。waitforreadyread函数可能导致线程阻塞,从而影响UI响应。建议优化程序逻辑和超时设置,避免UI卡顿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际的读取串口工作中出现了这种情况,经过分析问题,可能有以下几个原因。
第一 ,在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 event loop. It is useful when writing non-GUI applications and when performing I/O operations in a non-GUI thread.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值