[gelöst]QThreads: Welche Invarianten gelten für Threads?
Verfasst: 7. November 2007 00:09
Seit ein paar Tagen beschäftige ich mich mit QT, und muss sagen, das es wirklich eine schöne Bibliothek ist.
Allerdings bin ich gerade in der Sackgasse, und wollte bevor ich jetzt den Quellcode von QT durchackere erst noch bei euch nach fragen.
Folgende Situation:
Ich habe eine kleine Anwendung die einen Thread konstruiert und aufruft.
Komischer weise stürzt die Anwendung ab. Rufe ich die run()-Methode des Threads manuell auf (um zu prüfen ob der code darin korrekt ist), funktioniert alles wie es soll, nur eben ohne Thread.
Das interessante im Fehlerfall (also nicht run() manuell aufrufen) ist das dass letzte Statement vor thread->start() ausgeführt wird, aber das erste Satement (simple logging-Ausgabe) innerhalb von Thread::run() nicht mehr ausgeführt wird.
Daraus folgere ich das es nicht an meiner run()-Methode liegt, sondern das während der Ausführung der start()-Methode etwas passiert das meine Anwendung abstürzen lässt.
Daher meine Frage: Woran muss ich mich halten wenn ich eine Thread-Klasse programmiere. Das ich run() überschreiben muss ist klar. Ebenso das ich den Thread mit start() starte. Genauso wie das der Thread natürlich von QThread erben muss.
Allerdings bin ich gerade in der Sackgasse, und wollte bevor ich jetzt den Quellcode von QT durchackere erst noch bei euch nach fragen.
Folgende Situation:
Ich habe eine kleine Anwendung die einen Thread konstruiert und aufruft.
Komischer weise stürzt die Anwendung ab. Rufe ich die run()-Methode des Threads manuell auf (um zu prüfen ob der code darin korrekt ist), funktioniert alles wie es soll, nur eben ohne Thread.
Das interessante im Fehlerfall (also nicht run() manuell aufrufen) ist das dass letzte Statement vor thread->start() ausgeführt wird, aber das erste Satement (simple logging-Ausgabe) innerhalb von Thread::run() nicht mehr ausgeführt wird.
Daraus folgere ich das es nicht an meiner run()-Methode liegt, sondern das während der Ausführung der start()-Methode etwas passiert das meine Anwendung abstürzen lässt.
Daher meine Frage: Woran muss ich mich halten wenn ich eine Thread-Klasse programmiere. Das ich run() überschreiben muss ist klar. Ebenso das ich den Thread mit start() starte. Genauso wie das der Thread natürlich von QThread erben muss.