【发布时间】:2016-05-27 17:25:22
【问题描述】:
在an answer on another question 中,声称当使用带有QSerialPort 的主Qt 事件循环时,QSerialPort::waitForBytesWritten 会导致“细微错误”,因为它会打开另一个事件循环。
我正在使用waitForBytesWritten 方法来确保在写入所有字节之前不会重新进入我的主事件循环。这不是一种有效的方法吗?会出现哪些“细微错误”?我应该改用flush(),这会确保在写入所有待处理字节之前不会再次输入我的事件循环吗?
我am在我的应用程序中看到一些与其串行端口通信相关的奇怪行为,但我不确定是哪个“层”通信导致了问题,所以它甚至可能不是与我对QSerialPort 的使用有关。目前,我对它的起源的唯一提示是 QSerialPort 在我看到不良行为开始前不久发出 ResourceError 。这个ResourceError 会不会和我使用waitForBytesWritten 有关?
我在 Debian 7 系统上使用 Qt 5.5.1。
【问题讨论】:
-
在没有看到一些代码的情况下很难说出为什么
ResourceError会发生。 -
@KubaOber 我不确定在这种情况下我可以提供多少代码,因为它是一个相当复杂的应用程序,并且它是专有产品的一部分。即使我将其缩减为一些较小的示例,我也不确定哪些部分是相关的,并且我无法创建最小的可重现案例,因为通信层、串行通信通道另一侧的进程等是都是专有的。
-
.......但即使是了解什么,确切地说,甚至可以在硬件串行端口上触发
ResourceError也会有所帮助。 -
顺便说一句:请解释为什么你认为你需要
waitForBytesWritten:你认为该操作在调用它之前和之后的状态方面的含义是什么。你想通过调用它来实现什么? -
@KubaOber 主要是为了尽快发送有效数据包的确认,一旦我读过它们。对于此协议,确认只有 4 或 5 个字节,因此我们的想法是立即将它们写入底层设备驱动程序。
标签: c++ qt serial-port debian