diff --git a/mt32emu_qt/src/QSynth.cpp b/mt32emu_qt/src/QSynth.cpp index c3f5185..14a0cce 100644 --- a/mt32emu_qt/src/QSynth.cpp +++ b/mt32emu_qt/src/QSynth.cpp @@ -22,6 +22,7 @@ #include "AudioFileWriter.h" #include "Master.h" #include "MasterClock.h" +#include "RealtimeLocker.h" using namespace MT32Emu; @@ -72,25 +73,6 @@ static int readMasterVolume(Synth *synth) { return masterVolume; } -class RealtimeLocker { -private: - QMutex &mutex; - bool locked; - -public: - explicit RealtimeLocker(QMutex &useMutex) : mutex(useMutex) { - locked = mutex.tryLock(); - } - - ~RealtimeLocker() { - if (locked) mutex.unlock(); - } - - bool isLocked() { - return locked; - } -}; - class RealtimeHelper : public QThread { private: enum SynthControlEvent { diff --git a/mt32emu_qt/src/RealtimeLocker.h b/mt32emu_qt/src/RealtimeLocker.h new file mode 100644 index 0000000..87de37d --- /dev/null +++ b/mt32emu_qt/src/RealtimeLocker.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2011-2020 Jerome Fisher, Sergey V. Mikayev + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef REALTIME_LOCKER_H +#define REALTIME_LOCKER_H + +#include "QMutex" + +// Similar to QMutexLocker but intended to be used from a realtime thread that should never block. +class RealtimeLocker { +private: + QMutex &mutex; + bool locked; + +public: + explicit RealtimeLocker(QMutex &useMutex) : mutex(useMutex) { + locked = mutex.tryLock(); + } + + ~RealtimeLocker() { + if (locked) mutex.unlock(); + locked = false; + } + + bool isLocked() { + return locked; + } +}; + +#endif // REALTIME_LOCKER_H