Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
qt_topics [2014/12/27 12:29] karl angelegt |
qt_topics [2018/03/26 00:46] (aktuell) karl [Worker-Threads] |
||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
http:// | http:// | ||
+ | ===== Worker-Threads ===== | ||
+ | [[http:// | ||
+ | Wenn man eine GUI hat, in der dann rechenintensieve Routinen laufen, dann sollten diese unbedingt in einem eigenen Thread laufen! | ||
+ | Grundprinzip: | ||
+ | * Es gibt den GUI-Thread (z.B. MainWindow) und den Arbeiter-Thread. | ||
+ | * Innerhalb des mainWindows wird der Arbeiter-Thread mit < | ||
+ | * Weiters muss man die rechenaufwändigen Sachen in eine eigene QObject-Klasse packen, also von QObject ableiten. < | ||
+ | { | ||
+ | ... | ||
+ | }</ | ||
+ | * In der GUI wird dann zur Laufzeit ein Objekt von Worker anglegt, und dieses dann in den Thread geschoben: < | ||
+ | worker-> | ||
+ | * Hat man alle Signals und Slots vom mainWindow und worker verbunden, startet man den Thread: < | ||
+ | connect(this, | ||
+ | connect(worker, | ||
+ | connect(worker, | ||
+ | workerThread.start();</ | ||
+ | |||
+ | Somit läuft das Objekt nun in einem eigenen Thread, und wir mit einem | ||
+ | emit operate(); | ||
+ | angestartet. Von dem Thread aus kann man dann ganz normal seine Signals an mainWindow schicken, und dort entsprechend die GUI updaten, z.B. einen QProgressbar. | ||
+ | |||
+ | {{tag> |