mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 13:11:20 -05:00 
			
		
		
		
	KiwiSDR: updated threading model. Part of #1346
This commit is contained in:
		
							parent
							
								
									250144bb0e
								
							
						
					
					
						commit
						79b7e16c29
					
				@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user