kopia lustrzana https://github.com/f4exb/sdrangel
				
				
				
			AirspyHF: Update threading model
							rodzic
							
								
									53df5fe5d7
								
							
						
					
					
						commit
						63282ebfcd
					
				|  | @ -50,6 +50,7 @@ AirspyHFInput::AirspyHFInput(DeviceAPI *deviceAPI) : | |||
| 	m_settings(), | ||||
| 	m_dev(nullptr), | ||||
| 	m_airspyHFWorker(nullptr), | ||||
|     m_airspyHFWorkerThread(nullptr), | ||||
| 	m_deviceDescription("AirspyHF"), | ||||
| 	m_running(false) | ||||
| { | ||||
|  | @ -174,10 +175,15 @@ bool AirspyHFInput::start() | |||
|         stop(); | ||||
|     } | ||||
| 
 | ||||
| 	m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo); | ||||
|     m_airspyHFWorker->moveToThread(&m_airspyHFWorkerThread); | ||||
|     m_airspyHFWorkerThread = new QThread(this); | ||||
|     m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo); | ||||
|     m_airspyHFWorker->moveToThread(m_airspyHFWorkerThread); | ||||
| 	int sampleRateIndex = m_settings.m_devSampleRateIndex; | ||||
| 
 | ||||
|     QObject::connect(m_airspyHFWorkerThread, &QThread::started, m_airspyHFWorker, &AirspyHFWorker::startWork); | ||||
|     QObject::connect(m_airspyHFWorkerThread, &QThread::finished, m_airspyHFWorker, &QObject::deleteLater); | ||||
|     QObject::connect(m_airspyHFWorkerThread, &QThread::finished, m_airspyHFWorkerThread, &QThread::deleteLater); | ||||
| 
 | ||||
|     if (m_settings.m_devSampleRateIndex >= m_sampleRates.size()) { | ||||
|         sampleRateIndex = m_sampleRates.size() - 1; | ||||
|     } | ||||
|  | @ -190,40 +196,15 @@ bool AirspyHFInput::start() | |||
|     m_airspyHFWorker->setIQOrder(m_settings.m_iqOrder); | ||||
|     mutexLocker.unlock(); | ||||
| 
 | ||||
|     if (startWorker()) | ||||
|     { | ||||
|         qDebug("AirspyHFInput::startInput: started"); | ||||
|         applySettings(m_settings, true); | ||||
|         m_running = true; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_running = false; | ||||
|     } | ||||
|     m_airspyHFWorkerThread->start(); | ||||
| 
 | ||||
|     qDebug("AirspyHFInput::startInput: started"); | ||||
|     applySettings(m_settings, true); | ||||
|     m_running = true; | ||||
| 
 | ||||
| 	return m_running; | ||||
| } | ||||
| 
 | ||||
| bool AirspyHFInput::startWorker() | ||||
| { | ||||
| 	if (m_airspyHFWorker->startWork()) | ||||
|     { | ||||
|     	m_airspyHFWorkerThread.start(); | ||||
|         return true; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AirspyHFInput::stopWorker() | ||||
| { | ||||
| 	m_airspyHFWorker->stopWork(); | ||||
| 	m_airspyHFWorkerThread.quit(); | ||||
| 	m_airspyHFWorkerThread.wait(); | ||||
| } | ||||
| 
 | ||||
| void AirspyHFInput::closeDevice() | ||||
| { | ||||
|     if (m_dev) | ||||
|  | @ -241,12 +222,13 @@ void AirspyHFInput::stop() | |||
| 	qDebug("AirspyHFInput::stop"); | ||||
| 	QMutexLocker mutexLocker(&m_mutex); | ||||
| 
 | ||||
| 	if (m_airspyHFWorker) | ||||
| 	{ | ||||
| 	    stopWorker(); | ||||
| 		delete m_airspyHFWorker; | ||||
| 		m_airspyHFWorker = nullptr; | ||||
| 	} | ||||
|     if (m_airspyHFWorkerThread) | ||||
|     { | ||||
|         m_airspyHFWorkerThread->quit(); | ||||
|         m_airspyHFWorkerThread->wait(); | ||||
|         m_airspyHFWorkerThread = nullptr; | ||||
|         m_airspyHFWorker = nullptr; | ||||
|     } | ||||
| 
 | ||||
| 	m_running = false; | ||||
| } | ||||
|  |  | |||
|  | @ -142,15 +142,13 @@ private: | |||
| 	AirspyHFSettings m_settings; | ||||
| 	airspyhf_device_t* m_dev; | ||||
| 	AirspyHFWorker* m_airspyHFWorker; | ||||
|     QThread m_airspyHFWorkerThread; | ||||
|     QThread *m_airspyHFWorkerThread; | ||||
| 	QString m_deviceDescription; | ||||
| 	std::vector<uint32_t> m_sampleRates; | ||||
| 	bool m_running; | ||||
|     QNetworkAccessManager *m_networkManager; | ||||
|     QNetworkRequest m_networkRequest; | ||||
| 
 | ||||
| 	bool startWorker(); | ||||
| 	void stopWorker(); | ||||
| 	bool openDevice(); | ||||
| 	void closeDevice(); | ||||
| 	bool applySettings(const AirspyHFSettings& settings, bool force); | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Jon Beniston
						Jon Beniston