2017-10-10 7 views
1

실시간 오디오 응용 프로그램을위한 이중 버퍼를 구현하려고하는데 QAudioInputQIODevice의 하위 클래스 여야합니다. 이 방법에 대한 설명서가 매우 혼란 스럽습니다.QIODevice :: writeData 구현, 혼동스러운 문서

우선 설명서의 메소드 서명이 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 구현은 모든 데이터를 단일 호출로 버퍼링하는 것인가 여부를 결정합니다.

+0

매개 변수의 이름을 변경해도 함수 서명에 영향을주지 않습니다. 아니면 당신을 방해하는 가상인가? – user463035818

+1

니스 찾기! :] 현재 구현 [QDataStream] (http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdatastream.cpp),'writeData'를 사용하지 않는 것 같습니다. – bezet

+0

그것은 나를 방해하는 매개 변수 이름의 의미입니다. 나에게 maxSize는 모든 데이터를 쓸 필요가 없음을 의미하지만 len은 함축 된 의미가 없다. 혼란스러운 문서와 결합하여 나는 명확한 설명을 얻고 싶습니다. –

답변

0

기본적으로 다음과 같이 말합니다. 전달 된 datamaxSize 바이트입니다. 구현시 모든 데이터를 쓰고 쓰여진 바이트 수를 반환해야합니다.

사용 가능한 데이터를 적게 쓰는 것은 가능하지만 그렇게해서는 안됩니다. 그렇게하면 장치를 사용하는 일부 클래스가 QDataStream과 같이 반응하지 않을 수 있습니다. QAudioInput이 쓰기 호출을 처리하는 방법에 따라 다릅니다. 완료를 기록하지 않으면 결과를 확인하고 누락 된 데이터를 다시 쓰는 경우 모든 데이터를 쓰지 않는 것이 좋습니다. 그렇지 않은 경우 모든 데이터를 항상 작성해야합니다.

간단히 해보기 : 항상 1 바이트 만 쓰고 (1을 반환). 제대로 작동한다면 제대로 전달 된 데이터를 모두 작성하거나 -1로 실패해야합니다.