1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-02 13:17:48 -04:00

TestMI: updated threading model. Part of #1346

This commit is contained in:
f4exb 2022-10-09 12:55:57 +02:00
parent 621f6a667e
commit 0e236f8acc

View File

@ -86,13 +86,13 @@ void TestMI::init()
bool TestMI::startRx() bool TestMI::startRx()
{ {
qDebug("TestMI::startRx");
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
if (m_running) { if (m_running) {
stopRx(); return true;
} }
qDebug("TestMI::startRx");
m_testSourceWorkers.push_back(new TestMIWorker(&m_sampleMIFifo, 0)); m_testSourceWorkers.push_back(new TestMIWorker(&m_sampleMIFifo, 0));
m_testSourceWorkerThreads.push_back(new QThread()); m_testSourceWorkerThreads.push_back(new QThread());
m_testSourceWorkers.back()->moveToThread(m_testSourceWorkerThreads.back()); m_testSourceWorkers.back()->moveToThread(m_testSourceWorkerThreads.back());
@ -104,10 +104,10 @@ bool TestMI::startRx()
m_testSourceWorkers.back()->setSamplerate(m_settings.m_streams[1].m_sampleRate); m_testSourceWorkers.back()->setSamplerate(m_settings.m_streams[1].m_sampleRate);
startWorkers(); startWorkers();
m_running = true;
mutexLocker.unlock(); mutexLocker.unlock();
applySettings(m_settings, true); applySettings(m_settings, true);
m_running = true;
return true; return true;
} }
@ -120,22 +120,18 @@ bool TestMI::startTx()
void TestMI::stopRx() void TestMI::stopRx()
{ {
qDebug("TestMI::stopRx");
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
stopWorkers();
std::vector<TestMIWorker*>::iterator itW = m_testSourceWorkers.begin(); if (!m_running) {
std::vector<QThread*>::iterator itT = m_testSourceWorkerThreads.begin(); return;
for (; (itW != m_testSourceWorkers.end()) && (itT != m_testSourceWorkerThreads.end()); ++itW, ++itT)
{
(*itW)->deleteLater();
delete (*itT);
} }
qDebug("TestMI::stopRx");
m_running = false;
stopWorkers();
m_testSourceWorkers.clear(); m_testSourceWorkers.clear();
m_testSourceWorkerThreads.clear(); m_testSourceWorkerThreads.clear();
m_running = false;
} }
void TestMI::stopTx() void TestMI::stopTx()
@ -150,6 +146,8 @@ void TestMI::startWorkers()
for (; (itW != m_testSourceWorkers.end()) && (itT != m_testSourceWorkerThreads.end()); ++itW, ++itT) for (; (itW != m_testSourceWorkers.end()) && (itT != m_testSourceWorkerThreads.end()); ++itW, ++itT)
{ {
QObject::connect(*itT, &QThread::finished, *itW, &QObject::deleteLater);
QObject::connect(*itT, &QThread::finished, *itT, &QThread::deleteLater);
(*itW)->startWork(); (*itW)->startWork();
(*itT)->start(); (*itT)->start();
} }