Hallo,
bin gerade am GUI bauen per QT und scheinbar ist es leider so, dass man mit der QT GUI ausschließlich im GUI Thread arbeiten darf (MainWindow).
Jetzt habe ich ein Programm wo hin und wieder verschiedene Worker-Threads was in der GUI anzeigen sollen.
Das Problem ist, sobald ich zB per condition-Variable im MainWindow-Thread blockierendes Warten einbaue um Signale und Daten von den Threads zum empfangen und anzuzeigen dann blockiere ich die ganze GUI.
Wenn man um dies zu lösen dann ein Thread erzeugt zB std::thread thr(&MainWindow::showData,this); in dem man eigentlich die GUI-Funktionalitäten hätte, dann wirft es zur Laufzeit den Fehler "QObject: Cannot create chlidren for parent that is in a different thread. Schade.
Ohne GUI hätte ich keine Probleme per condition variable, Threads, locks alles schön zu machen, aber ich habe keine Ahnung wo ich blockierendes Warten reinbekomme ohne das GUI einzufrieren. Zwischendurch will ich noch die Knöpfe bedienen können.
Gibt es in QT eine Funktion die blockierendes Warten zulässt ohne dabei die GUI einzufrieren? Die Knöpfe sind doch am Ende auch nichts anderes als blockierendes Warten, müsste doch auch ausgelöst durch Threads gehen...?
Gerne würde ich auch vermeiden in meine "reinen" C++Threads zuviel QT-spezifische Dinge reinzubauen.
Grüße
bin gerade am GUI bauen per QT und scheinbar ist es leider so, dass man mit der QT GUI ausschließlich im GUI Thread arbeiten darf (MainWindow).
Jetzt habe ich ein Programm wo hin und wieder verschiedene Worker-Threads was in der GUI anzeigen sollen.
Das Problem ist, sobald ich zB per condition-Variable im MainWindow-Thread blockierendes Warten einbaue um Signale und Daten von den Threads zum empfangen und anzuzeigen dann blockiere ich die ganze GUI.
Wenn man um dies zu lösen dann ein Thread erzeugt zB std::thread thr(&MainWindow::showData,this); in dem man eigentlich die GUI-Funktionalitäten hätte, dann wirft es zur Laufzeit den Fehler "QObject: Cannot create chlidren for parent that is in a different thread. Schade.
Ohne GUI hätte ich keine Probleme per condition variable, Threads, locks alles schön zu machen, aber ich habe keine Ahnung wo ich blockierendes Warten reinbekomme ohne das GUI einzufrieren. Zwischendurch will ich noch die Knöpfe bedienen können.
Gibt es in QT eine Funktion die blockierendes Warten zulässt ohne dabei die GUI einzufrieren? Die Knöpfe sind doch am Ende auch nichts anderes als blockierendes Warten, müsste doch auch ausgelöst durch Threads gehen...?
Gerne würde ich auch vermeiden in meine "reinen" C++Threads zuviel QT-spezifische Dinge reinzubauen.
Grüße