如何知道 QSerialPort 何时准备好接收 Qt5 中的更多数据?

Posted

技术标签:

【中文标题】如何知道 QSerialPort 何时准备好接收 Qt5 中的更多数据?【英文标题】:How to know when QSerialPort is ready for more data in Qt5? 【发布时间】:2016-04-25 11:33:23 【问题描述】:

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

我正在实现一个程序,该程序使用QSerialPort 的异步 API 通过串行向伺服控制器提供命令。该程序可以运行,但我似乎遇到了拥堵。

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

我的问题是,在异步模式下使用QSerialPort时,当串行接口准备好以某种方式接收新数据时,我可以收到通知吗?

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

您的意思是从 bytesWritten 处理程序中检查 bytesToWrite? 是的。可以多次调用 bytesWritten 处理程序,但只有当 bytesToWrite 达到零时,写入缓冲区才会为空。 我创建了自己的计数器,但不知道 bytesWritten(),但效果不佳。只需用那个调用替换我的变量,一切都很好。

以上是关于如何知道 QSerialPort 何时准备好接收 Qt5 中的更多数据?的主要内容,如果未能解决你的问题,请参考以下文章

c#SslStream的read()函数如何知道何时返回0?

如何知道数据库何时在 Django 中准备就绪?

如何使用 pyqtgraph 和 QSerialPort 创建实时图?

知道 AVPlayer 对象何时准备好播放

如何知道 jquery $.get ajax 调用何时完成?

如何知道数据库何时准备就绪?