axeljaeger
29-06-2004, 15:13
Hallo,
ich habe eine QtApplikation, die eine Anzahl von kleinen Datenpäckchen (in meinem Fall QImages) verarbeiten muss. Das dauert seine Zeit. Um dem Benutzer das Warten zu versüßen und die Benutzerinteraktion während des Verarbeitens weiter zu ermöglichen, habe ich einen Tipp aus der Qt Doku übernommen:
QTimer *t = new QTimer( myObject );
connect( t, SIGNAL(timeout()), SLOT(processOneThing()));
t->start( 0, FALSE );
Weiter unten heist es aber, dass dieses ein Hack ist und dass man eher Threads verwenden soll. Ich hab das auch mal versucht, den Ansatz aber wieder verworfen, weil das im Hängen der Anwendung geendet hat und das Programm unbedingt zum Linuxtag fertig werden sollte. Ich hab auch keine Idee, wie ich folgendes sinnvoll in Threads verpacke:
- Es ist auf eine Anzahl QImages ein Filter anzuwenden
- Wenn ein QImage fertig ist, soll es angezeigt werden.
- Während die Verarbeitung läuft, soll es möglich sein, den Filter zu verändern. Wenn das passiert ist, soll die aktuelle Bearbeitung der QImages abgebrochen werden und von vorne mit dem neuen Filter angefangen werden. Der Thread muss also Befehle entgegen nehmen können und muss ein Event rausschicken, wenn er mit einem QImage fertig ist.
- Um ein QImage anzuzeigen, muss ich es in eine QPixmap konvertieren. Das dauert auch seine Zeit und darf meines Wissens nach nur im Hauptthread gemacht werden, weil da mit dem Windowsystem seitens Qt gesprochen wird.
Ist es in meiner Situation aus oben genannten Gründen überhaupt sinnvoll, einen Thread einzusetzen?
Mein erster Versuch sah so aus, dass der Thread einen Pointer auf das Array mit den QImages im Hauptthread hatte und dieses dann bearbeitet hat.
Vielen Dank für Doku, Tipps und Ideen.
ich habe eine QtApplikation, die eine Anzahl von kleinen Datenpäckchen (in meinem Fall QImages) verarbeiten muss. Das dauert seine Zeit. Um dem Benutzer das Warten zu versüßen und die Benutzerinteraktion während des Verarbeitens weiter zu ermöglichen, habe ich einen Tipp aus der Qt Doku übernommen:
QTimer *t = new QTimer( myObject );
connect( t, SIGNAL(timeout()), SLOT(processOneThing()));
t->start( 0, FALSE );
Weiter unten heist es aber, dass dieses ein Hack ist und dass man eher Threads verwenden soll. Ich hab das auch mal versucht, den Ansatz aber wieder verworfen, weil das im Hängen der Anwendung geendet hat und das Programm unbedingt zum Linuxtag fertig werden sollte. Ich hab auch keine Idee, wie ich folgendes sinnvoll in Threads verpacke:
- Es ist auf eine Anzahl QImages ein Filter anzuwenden
- Wenn ein QImage fertig ist, soll es angezeigt werden.
- Während die Verarbeitung läuft, soll es möglich sein, den Filter zu verändern. Wenn das passiert ist, soll die aktuelle Bearbeitung der QImages abgebrochen werden und von vorne mit dem neuen Filter angefangen werden. Der Thread muss also Befehle entgegen nehmen können und muss ein Event rausschicken, wenn er mit einem QImage fertig ist.
- Um ein QImage anzuzeigen, muss ich es in eine QPixmap konvertieren. Das dauert auch seine Zeit und darf meines Wissens nach nur im Hauptthread gemacht werden, weil da mit dem Windowsystem seitens Qt gesprochen wird.
Ist es in meiner Situation aus oben genannten Gründen überhaupt sinnvoll, einen Thread einzusetzen?
Mein erster Versuch sah so aus, dass der Thread einen Pointer auf das Array mit den QImages im Hauptthread hatte und dieses dann bearbeitet hat.
Vielen Dank für Doku, Tipps und Ideen.