实际写入QSerialPort中的设备的字节数

时间:2018-09-24 13:53:23

标签: c++ linux qt serial-port

在QSerialPort中有一个byteWrited信号(继承自QIODevice),该信号在将多个字节写入底层设备时发出。 如果我们使用QSerialPort写方法发送10Kb数据,则将立即发出bytesWritten信号,表明已将4k数据写入Linux串行端口设备的缓冲区中(因为默认的串行端口写缓冲区大小为1page = 4096B)。

但是,为了显示进度条,我们需要知道串行端口已传输了多少数据。 QSerialPort甚至Linux串行端口字符设备中是否有此类功能?!

注意: QSerialPort中有waitForBytesWritten,它等待清空缓冲区,但是此方法会阻塞事件循环并冻结UI。将串行端口移至另一个线程似乎是一个不错的解决方案,但就我而言,将需要进行很多更改,因此不建议这样做。

编辑: ioctl用于获取输出缓冲区中的字节数,称为TIOCOUTQ。我无法验证这是否适用于串行端口,但是我对其进行了测试,并且每次TIOCOUTQ ioctl调用都得到零(即使串行端口正在发送内容)。

0 个答案:

没有答案