Ich schreibe eine QT-Desktop-Anwendung, die Informationen anzeigen wird, die von einem seriellen Port empfangen werden. Daher wurde eine Klasse erstellt und in eine DLL gepackt, wobei Standard-Windows-API-Funktionen verwendet wurden, um mit dem verbundenen Gerät zu kommunizieren (CreateFile, ReadFile, WriteFile, ...).Kommunikation mit seriellen Anschlüssen in C++ mit Qt
Im Moment ruft ein Timer die DLL mit einer vordefinierten Rate [< 200ms] auf, was dazu führt, dass die GUI für kurze Zeit einfriert. Aus diesem Grund denke ich darüber nach, einen Thread zu verwenden, um den seriellen Port zu machen, der auch alles anzeigen wird.
Ist es besser, Threads für dieses Problem zu verwenden, oder sollte ich die Klasse neu schreiben, um das Arbeitsereignis basierend zu machen? Das Ziel ist, dass die GUI nicht einfriert.
Edit: Ich löste das Problem mit einer QThread abgeleiteten Arbeiterklasse mit einer überschatteten run() -Funktion, die die Kommunikation der seriellen Schnittstelle im Hintergrund behandelt und die GUI aktualisiert, sobald neue Informationen verfügbar sind.
Gibt es einen Grund, [QSerialPort' nicht zu verwenden (https://doc.qt.io/qt-5/qserialport.html#details)? – Mike
'QSerialPort' übernimmt bereits die asynchrone Kommunikation mit einem seriellen Port. Die Verwendung von Threads für eine solche Aufgabe funktioniert, wenn Sie nicht nur die GUI einfrieren wollen, sondern es ist ein Overkill. Der asynchrone Ansatz funktioniert besser mit Qt und ist viel wartungsfreundlicher. – Mike
Als das Projekt gestartet wurde, wollten wir nicht qt verwenden. Also haben wir angefangen mit nur den Fenstern api – Aeonos