1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-02 06:04:39 -04:00

Update threading in Rotator Controller for #1346

This commit is contained in:
Jon Beniston
2022-09-18 16:47:06 +01:00
parent 0c5caef095
commit 5da8d6d28c
4 changed files with 31 additions and 55 deletions
@@ -49,12 +49,12 @@ const char* const GS232Controller::m_featureIdURI = "sdrangel.feature.gs232contr
const char* const GS232Controller::m_featureId = "GS232Controller";
GS232Controller::GS232Controller(WebAPIAdapterInterface *webAPIAdapterInterface) :
Feature(m_featureIdURI, webAPIAdapterInterface)
Feature(m_featureIdURI, webAPIAdapterInterface),
m_thread(nullptr),
m_worker(nullptr)
{
qDebug("GS232Controller::GS232Controller: webAPIAdapterInterface: %p", webAPIAdapterInterface);
setObjectName(m_featureId);
m_worker = new GS232ControllerWorker();
m_worker->moveToThread(&m_thread);
m_state = StIdle;
m_errorMessage = "GS232Controller error";
m_selectedPipe = nullptr;
@@ -124,22 +124,22 @@ GS232Controller::~GS232Controller()
&GS232Controller::networkManagerFinished
);
delete m_networkManager;
if (m_worker->isRunning()) {
stop();
}
delete m_worker;
stop();
}
void GS232Controller::start()
{
qDebug("GS232Controller::start");
m_worker->reset();
m_thread = new QThread(this);
m_worker = new GS232ControllerWorker();
m_worker->moveToThread(m_thread);
QObject::connect(m_thread, &QThread::started, m_worker, &GS232ControllerWorker::startWork);
QObject::connect(m_thread, &QThread::finished, m_worker, &QObject::deleteLater);
QObject::connect(m_thread, &QThread::finished, m_thread, &QThread::deleteLater);
m_worker->setMessageQueueToFeature(getInputMessageQueue());
bool ok = m_worker->startWork();
m_state = ok ? StRunning : StError;
m_thread.start();
m_thread->start();
m_state = StRunning;
GS232ControllerWorker::MsgConfigureGS232ControllerWorker *msg = GS232ControllerWorker::MsgConfigureGS232ControllerWorker::create(m_settings, true);
m_worker->getInputMessageQueue()->push(msg);
@@ -150,10 +150,14 @@ void GS232Controller::start()
void GS232Controller::stop()
{
qDebug("GS232Controller::stop");
m_worker->stopWork();
m_state = StIdle;
m_thread.quit();
m_thread.wait();
if (m_thread)
{
m_thread->quit();
m_thread->wait();
m_thread = nullptr;
m_worker = nullptr;
}
}
bool GS232Controller::handleMessage(const Message& cmd)
@@ -404,7 +408,9 @@ void GS232Controller::applySettings(const GS232ControllerSettings& settings, boo
GS232ControllerWorker::MsgConfigureGS232ControllerWorker *msg = GS232ControllerWorker::MsgConfigureGS232ControllerWorker::create(
settings, force
);
m_worker->getInputMessageQueue()->push(msg);
if (m_worker) {
m_worker->getInputMessageQueue()->push(msg);
}
if (settings.m_useReverseAPI)
{