Fixed thread sync

This commit is contained in:
2026-01-08 19:05:07 +01:00
parent f19a33cc5f
commit 6b03797600
4 changed files with 28 additions and 32 deletions

View File

@@ -143,33 +143,16 @@ void BCTransmitter::onUpdateValue( BCValuePtrConst valuePtr)
// Wir benutzen doch eine zusätzliche Queue, um erkennen zu können, ob der
// der aktuelle Auftragsblock abgearbeit wurde.
_valueQueue.enqueue( valuePtr );
//_valueQueue.enqueue( valuePtr );
//qDebug() << " # #### ENQ: " <<_valueQueue.size();
// Wir schicken den event gleich wieder weiter ...
QMetaObject::invokeMethod(this, "onProcessValue", Qt::QueuedConnection);
}
//QMetaObject::invokeMethod(this, "onProcessValue", Qt::QueuedConnection);
void BCTransmitter::onProcessValue()
{
while (true)
{
BCValuePtrConst valuePtr{};
{
//QMutexLocker locker(&_mutex);
if (_valueQueue.isEmpty())
{
//_isBusy = false;
//qDebug() << " --- XXXXXXXXXX Warum so oft?";
emit valueQueueEmpty();
break; // Schleife verlassen, warten auf neue Events
}
valuePtr =_valueQueue.dequeue();
//qDebug() << " # #### DEQ: " <<_valueQueue.size();
} // Mutex wird hier freigegeben! WICHTIG: Execute ohne Lock!
// Kosmetik
const BCValue& value = *(valuePtr.get());
// Kosmetik
const BCValue& value = *(valuePtr.get());
// Kosmetik
//const BCValue& value = *(valuePtr.get());
@@ -189,7 +172,6 @@ void BCTransmitter::onProcessValue()
if(value.valueFlags.testFlag( BCValue::Flag::WriteMe ) )
{
}
// oder sollen wir hier beides erlauben ? readFlag & writeFlag ?
// Was kommt dann zuerst? Schreiben und lesen als verify ?
@@ -209,11 +191,21 @@ void BCTransmitter::onProcessValue()
// __fix
//bc::processEventsFor(150);
bc::delay_millis(150);
} // while
bc::delay_millis(250);
}
/**
* @brief Wenn dieser SLOT in der Event-Queue erreicht wird, dedeutet dies, das die
* Übertrgung vom Mainwindow abgeschlossen wurde. Wir schicken zur Bestätigung das
* Signal 'endOfProcessing' (Welches dann den 'Sync' - Button wieder einschaltet.
*/
void BCTransmitter::onEndOfTransmission()
{
qDebug() << " --- sending BACK EOT";
emit endOfProcessing();
}
TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t registerID )