Added BCTransmitter & woker thread.

This commit is contained in:
2025-12-18 20:34:38 +01:00
parent 1d558198c9
commit 059f3081d3
12 changed files with 90 additions and 252 deletions

View File

@@ -47,15 +47,56 @@ using namespace Qt::StringLiterals;
BCValueManager::BCValueManager()
{
qRegisterMetaType<BCValue>("BCValue");
_transmitter.moveToThread(&_worker);
// 4. Verbindungen herstellen (Signal/Slot über Thread-Grenzen)
// A) Befehl senden (Manager -> Runner)
connect(this, &BCValueManager::newCommandArrived, &_transmitter, &BCTransmitter::addCommand);
// B) Ergebnisse empfangen (Runner -> Manager)
connect(&_transmitter, &BCTransmitter::commandFinished, this, &BCValueManager::onCommandFinished);
connect(&_transmitter, &BCTransmitter::messageLogged, this, &BCValueManager::onRunnerMessage);
// C) Aufräumen: Wenn Thread endet, lösche den Runner
connect(&_worker, &QThread::finished, &_transmitter, &QObject::deleteLater);
// 5. Thread starten
_worker.start();
}
BCValueManager::~BCValueManager()
{
// nothing to do here for now,
// our models are autokilled.
_worker.quit(); // Event Loop stoppen
_worker.wait(); // Warten bis Thread wirklich fertig ist
}
void BCValueManager::transmitValue(const BCValue& value)
{
// Wir rufen keine Methode am Runner direkt auf!
// Wir emitten ein Signal. Qt kümmert sich um den Thread-Wechsel.
emit newCommandArrived(value);
}
void BCValueManager::onCommandFinished(int id, bool success)
{
qDebug() << "[Manager] Command" << id << "finished. Success:" << success;
}
void BCValueManager::onRunnerMessage(const QString &msg)
{
qDebug() << "[Worker says]:" << msg;
}
void BCValueManager::onToggleConnectionState( bool connect )
{
if( connect )
@@ -69,7 +110,8 @@ void BCValueManager::onToggleConnectionState( bool connect )
{
qDebug() << "Console not responding";
}
else {
else
{
/*
swVersion = getValue(CONSOLE, CONSOLE_REF_SW);
printf( "Console information:" _NL