Page 1 of 1

QT -Schnittstelle Einfrieren Sie die Hintergrundaufgabe ein

Posted: 09 Mar 2025, 11:26
by Anonymous
Ich habe ein unterhaltsames Problem zu lösen. Ich verwende QT 5 für eines meiner Projekte zum Lesen von Informationen im Netzwerk. Ich habe Modbus -Geräte und -Mobents gelesen, aber das eigentliche Problem kommt, wenn das Netzwerk nicht verfügbar ist. Das Netzwerk wird in einem separaten Thread erfolgen oder das ist was ich denke. Hier ist ein Codebeispiel: < /p>

Code: Select all

class TwidoDevice : public QObject
{
Q_OBJECT
public:
explicit TwidoDevice
........ And some useful code
< /code>

Die Verwendung der (Hauptschnittstelle) Klasse im Fenster.cpp < /code> ist: < /p>

L1Thread = new QThread();
L1Thread->start();
L1TWD = new TwidoDevice(L1TWD_settings,
L1TWD_Name,
PercentRegisters,
TotalsRegisters,
db, 1);
L1TWD->moveToThread(L1Thread);
connect(this, SIGNAL(startReading()), L1TWD, SLOT(startFired()), Qt::DirectConnection);
< /code>

In diesem Code startfired () < /code> Lesen Sie die Geräte im Netzwerk.emit startReading()
Wenn dieser Code ausgeführt wird, friert die Schnittstelle ein, obwohl ich das L1TWD -Objekt in Qthread verschoben habe. < /p>

Wenn ich versuche, ihn mit dem integrierten Debugger in QTCreator zu debuggen, kann ich nicht verstehen, ob das Objekt bewegt wurde oder nicht und warum die Schnittstelle während des Netzwerkaufrufs eingefroren ist. < /p>

Hat jemand das gleiche Problem gestoßen und wie kann dies gelöst werden? < /p>

Vielen Dank, dass Sie Zeit damit verbracht haben, meine Frage zu lesen! < /p>