【发布时间】:2017-10-10 17:59:17
【问题描述】:
我正在尝试为实时音频应用程序实现双缓冲区,QAudioInput 要求它是QIODevice 的子类。我发现这种方法的文档非常混乱。
首先,文档中的方法签名与 QT 5.9.2 的标头不匹配,该标头具有 virtual qint64 writeData(const char *data, qint64 len) = 0;。
文档有这个签名:qint64 QIODevice::writeData(const char *data, qint64 maxSize)
maxSize 参数让我感到困惑,因为它暗示我只能缓冲一些数据,文档也暗示了这一点:
最多可将
maxSize字节从数据写入设备。返回写入的字节数,如果发生错误,则返回-1。
但是,文档紧接着就说明了这一点,这对我来说似乎是矛盾的:
当重新实现这个函数时,这个函数在返回之前写入所有可用的数据是很重要的。这是
QDataStream能够对类进行操作所必需的。QDataStream假定所有信息都已写入,因此如果出现问题不会重试写入。
那么我的QIODevice 实现是否负责在一次调用中缓冲所有数据?
【问题讨论】:
-
更改参数的名称对函数的签名没有影响。还是虚拟的打扰了你?
-
不错的发现! :] QDataStream 的当前实现,似乎没有使用
writeData。 -
困扰我的是参数名称的含义。对我来说 maxSize 意味着我不需要写所有的数据,而 len 没有任何含义。结合我想要澄清的令人困惑的文档。
-
从第 267 行开始有更多解释:code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qiodevice.cpp