Use condition variable to suspend audio processing thread
This commit is contained in:
parent
3fd40888aa
commit
87bb570e24
2 changed files with 13 additions and 1 deletions
|
|
@ -70,8 +70,10 @@ qint64 AudioProcessor::readData(char* data, qint64 maxlen)
|
|||
|
||||
qint64 AudioProcessor::writeData(const char* data, qint64 len)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(inputMutex_);
|
||||
std::unique_lock<std::mutex> lock1(inputMutex_);
|
||||
std::unique_lock<std::mutex> lock2(inputEventMutex_);
|
||||
inputBuffer_.append(data, len);
|
||||
inputEvent_.notify_all();
|
||||
return len;
|
||||
}
|
||||
|
||||
|
|
@ -122,6 +124,12 @@ void AudioProcessor::process()
|
|||
emit readyRead();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
processLock.unlock();
|
||||
std::unique_lock<std::mutex> lock(inputEventMutex_);
|
||||
inputEvent_.wait(lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include <QIODevice>
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
|
||||
|
|
@ -79,6 +80,9 @@ private:
|
|||
std::thread worker_;
|
||||
bool doWork_ = false;
|
||||
|
||||
std::condition_variable inputEvent_;
|
||||
std::mutex inputEventMutex_;
|
||||
|
||||
QScopedPointer<WavFileWriter> sourceEncoder_;
|
||||
QScopedPointer<WavFileWriter> processedEncoder_;
|
||||
};
|
||||
|
|
|
|||
Reference in a new issue