Anzeige von Dingen aus verschiedenen Threads?

Alles rund um die Programmierung mit Qt
Antworten
double
Beiträge: 7
Registriert: 19. Dezember 2015 01:19

Anzeige von Dingen aus verschiedenen Threads?

Beitrag von double »

Hallo,

ich habe mal eine Anfängerfrage zur Anzeige aus Threads heraus.
Per QListWidget QLabel QTableWidget und auch qcustomplot lasse ich mir diverse Dinge darstellen und solange ich im main-thread bin ist alles prima.
Da ich ein Programm derzeit erweitere und mehrere std::thread für parallele Berechnungen starte bekomme ich Probleme mit der Darstellung der Infos und plots sobald ich versuche aus den Threads Infos oder plots anzuzeigen. Der Fehler ist "cannot send events to objects owned by a different thread".
Scheinbar sind also alle Anzeigen an den Main-thread gebunden und so wird für Threadsicherheit gesorgt. Für die Threadsicherheit hätte ich eigentlich selber gesorgt und per mutex oder atomics die Zugriffe auf die Anzeigen kontrolliert aber es wird ja grundsätzlich nicht zugelassen.

Welche Möglichkeiten gibt es denn, dass Werte aus unterschiedlichen Threads heraus in fixen QListWidget, QLabel, QTableWidget, qcustomplot angezeigt werden?

Viele Grüße
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Anzeige von Dingen aus verschiedenen Threads?

Beitrag von veeman »

Wenn du schon mit Qt arbeitest warum verwendest du nicht direkt QThread oder QRunnable.

Um die Informationen in deiner GUI zu aktualisieren solltest du das Signal und Slot System verwenden um der GUI zu sagen das diese neue Informationen anzeigen soll. Alternativ kannst du auch QMetaObject::invokeMethod aufrufen um eine "Slot" Funktion in dem Thread in dem die GUI läuft aufzurufen.

Je nach dem ob du die Informationen per Kopie beim Aufrufen eines Slots mitgibst oder nicht sollten dann auch die Threadsicherheit mit Qt mitteln sichergestellt werden: Synchronizing Threads.
Antworten