C++ QAudioOutput和QMediareRecorder是否异步

C++ QAudioOutput和QMediareRecorder是否异步,c++,qt,audio,C++,Qt,Audio,我正在尝试使用上面的QT类。 我在上面列出的类的文档中找不到任何内容 我的AudioOutput类看起来像这样 class AudioOutputThread : public QThread { public: /** * @brief Runs this thread */ void run() override; ///Pointer to the AudioOutput std::unique_ptr<QAudioOutput&

我正在尝试使用上面的QT类。 我在上面列出的类的文档中找不到任何内容

我的AudioOutput类看起来像这样

class AudioOutputThread : public QThread
{
public:
    /**
     * @brief Runs this thread
    */
    void run() override;

    ///Pointer to the AudioOutput
    std::unique_ptr<QAudioOutput> m_pAudio;
}

void AudioOutputThread::run()
{
 m_pAudio->start(&sourceFile);
 exec();
}
class AudioOutputThread:public QThread
{
公众:
/**
*@brief运行此线程
*/
void run()覆盖;
///指向音频输出的指针
std::独特的_ptrm_pAudio;
}
void AudioOutputThread::run()
{
m_pAudio->start(&sourceFile);
exec();
}
从外部开始,这是通过

void Foo()
{
  m_pThread = std::make_unique<AudioOutputThread>();
  m_pThread ->start();
}
void Foo()
{
m_pThread=std::make_unique();
m_pThread->start();
}
子类化QAudio的想法是在一个单独的(后台)线程中运行音频输出/录制。 那么首先:这真的是必要的还是m_pAudio->play()本身是异步运行的?

如果有必要,我将如何处理对音频对象的更改。即。 无效更改卷(浮动新卷) { //这可以从任何线程(QThread或std::thread)调用 m_pThread->m_pAudio->setVolume(newVolume); }

此调用将不会在最初开始播放的(子类化)QThread中执行

Second:这对QT来说可能是个问题吗?我是否必须发送通知,并说明如何处理调用->play()的(子类)QThread。

QT将如何反应:它实际上是否将setVolume请求委托给拥有AudioOutputBejct的线程


还是我让它变得比现在复杂得多?

通常最好将QObject移动到QThread中,而不是子类QThread。(例如,请参见。)