2016-04-25 24 views
0

当我的串口设备准备好接收更多数据时,有什么方法可以通知吗?如何知道QSerialPort何时准备好Qt5中的更多数据?

我正在实现一个程序,该程序通过使用异步 API的QSerialPort通过串行向伺服控制器发送命令。该计划有效,但似乎我正在经历拥堵。

在我的应用程序中,我保持最新伺服位置的注册表,我希望尽可能以低延迟与控制器同步。我试图以最快的速度将新数据推送到串行端口,这导致了我所认为的数据累积,导致通信全部中断。

我的问题是,当串行接口准备好接收新数据时,我可以通知QSerialPort异步模式?

我看到的唯一的其他选择是使用同步模式并致电waitForBytesWritten()但我真的不想这样做。

注意:我已仔细研究了serial port examples in the Qt5 documentation,但example for asynchronous write未提供我需要的信息,因为它在退出前执行一次性发送。

回答

1

您可以听取信号bytesWritten并检查bytesToWrite以确定写缓冲区是否为空。两者都从QIODevice继承。

+0

你的意思是从bytesWritten处理程序中检查bytesToWrite? –

+0

是的。可以多次调用bytesWritten处理程序,但只有当bytesToWrite达到零时,写入缓冲区才会为空。 –

+0

我已经让自己的计数器不知道bytesWritten(),但是这并不能很好地工作。只需将该变量替换为该调用,并且一切都很华丽。 –

相关问题