gpt4 book ai didi

c++ - 实现 QIODevice::writeData,混淆文档

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:59 24 4
gpt4 key购买 nike

我正在尝试为实时音频应用程序实现双缓冲区,QAudioInput 要求它是QIODevice 的子类。我发现此方法的文档非常困惑。

首先,文档中的方法签名与 QT 5.9.2 的 header 不匹配,它具有 virtual qint64 writeData(const char *data, qint64 len) = 0;

虽然文档有这个签名:qint64 QIODevice::writeData(const char *data, qint64 maxSize)

maxSize 参数让我感到困惑,因为它暗示我只能缓冲一些数据,文档也暗示了这一点:

Writes up to maxSize bytes from data to the device. Returns the number of bytes written, or -1 if an error occurred.

然而,紧接着文档说了这个,这对我来说似乎是矛盾的:

When reimplementing this function it is important that this function writes all the data available before returning. This is required in order for QDataStream to be able to operate on the class. QDataStream assumes all the information was written and therefore does not retry writing if there was a problem.

那么我的 QIODevice 实现是否负责在单个调用中缓冲所有数据?

最佳答案

他们基本上想说的是:传递的 datamaxSize 字节长。您的实现应该写入所有数据并返回写入的字节数。

写入比可用数据少的数据是可能的,但你不应该这样做。如果你这样做,一些使用你的设备的类可能不会对此使用react(比如 QDataStream)。这取决于 QAudioInput 如何处理写入调用。如果它检查结果并在未完全写入的情况下再次写入丢失的数据,则不写入所有数据是可以的。如果不是这种情况,您必须始终写入所有数据。

只需尝试一下:始终只写入 1 个字节(并返回 1)。如果有效,那很好,如果无效,则必须始终写入所有传递的数据,否则会返回 -1。

关于c++ - 实现 QIODevice::writeData,混淆文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com