1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-27 15:26:33 -04:00

KiwiSDR: updated threading model. Part of #1346

This commit is contained in:
f4exb 2022-10-08 12:10:19 +02:00
parent 250144bb0e
commit 79b7e16c29
2 changed files with 24 additions and 12 deletions

View File

@ -23,6 +23,7 @@
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QBuffer>
#include <QThread>
#include "SWGDeviceSettings.h"
#include "SWGDeviceState.h"
@ -44,6 +45,7 @@ KiwiSDRInput::KiwiSDRInput(DeviceAPI *deviceAPI) :
m_deviceAPI(deviceAPI),
m_settings(),
m_kiwiSDRWorker(nullptr),
m_kiwiSDRWorkerThread(nullptr),
m_deviceDescription("KiwiSDR"),
m_running(false),
m_masterTimer(deviceAPI->getMasterTimer())
@ -93,22 +95,28 @@ bool KiwiSDRInput::start()
{
QMutexLocker mutexLocker(&m_mutex);
if (m_running) stop();
if (m_running) {
return true;
}
m_kiwiSDRWorkerThread = new QThread();
m_kiwiSDRWorker = new KiwiSDRWorker(&m_sampleFifo);
m_kiwiSDRWorker->moveToThread(&m_kiwiSDRWorkerThread);
m_kiwiSDRWorkerThread.start();
m_kiwiSDRWorker->moveToThread(m_kiwiSDRWorkerThread);
QObject::connect(m_kiwiSDRWorkerThread, &QThread::finished, m_kiwiSDRWorker, &QObject::deleteLater);
QObject::connect(m_kiwiSDRWorkerThread, &QThread::finished, m_kiwiSDRWorkerThread, &QThread::deleteLater);
connect(this, &KiwiSDRInput::setWorkerCenterFrequency, m_kiwiSDRWorker, &KiwiSDRWorker::onCenterFrequencyChanged);
connect(this, &KiwiSDRInput::setWorkerServerAddress, m_kiwiSDRWorker, &KiwiSDRWorker::onServerAddressChanged);
connect(this, &KiwiSDRInput::setWorkerGain, m_kiwiSDRWorker, &KiwiSDRWorker::onGainChanged);
connect(m_kiwiSDRWorker, &KiwiSDRWorker::updateStatus, this, &KiwiSDRInput::setWorkerStatus);
mutexLocker.unlock();
applySettings(m_settings, true);
m_kiwiSDRWorkerThread->start();
m_running = true;
mutexLocker.unlock();
applySettings(m_settings, true);
return true;
}
@ -116,14 +124,18 @@ void KiwiSDRInput::stop()
{
QMutexLocker mutexLocker(&m_mutex);
if (!m_running) {
return;
}
setWorkerStatus(0);
if (m_kiwiSDRWorker)
if (m_kiwiSDRWorkerThread)
{
m_kiwiSDRWorkerThread.quit();
m_kiwiSDRWorkerThread.wait();
m_kiwiSDRWorker->deleteLater();
m_kiwiSDRWorkerThread->quit();
m_kiwiSDRWorkerThread->wait();
m_kiwiSDRWorker = nullptr;
m_kiwiSDRWorkerThread = nullptr;
}
m_running = false;

View File

@ -22,7 +22,6 @@
#include <QString>
#include <QByteArray>
#include <QTimer>
#include <QThread>
#include <QNetworkRequest>
#include <dsp/devicesamplesource.h>
@ -32,6 +31,7 @@ class DeviceAPI;
class KiwiSDRWorker;
class QNetworkAccessManager;
class QNetworkReply;
class QThread;
class KiwiSDRInput : public DeviceSampleSource {
Q_OBJECT
@ -154,7 +154,7 @@ private:
QMutex m_mutex;
KiwiSDRSettings m_settings;
KiwiSDRWorker* m_kiwiSDRWorker;
QThread m_kiwiSDRWorkerThread;
QThread *m_kiwiSDRWorkerThread;
QString m_deviceDescription;
bool m_running;
const QTimer& m_masterTimer;