Hallo lepsai,
kannst du mir dies bitte näher erläutern? Vor allem wie ich das umsetzen soll? Besonders da ich nur Beispiele gefunden habe, die mit meinem Fall nicht vergleichbar sind. *grübel*
Hm, und wo ist denn Mutex in dem Hauptthread? Ich meine in setImage()..
Allerdings habe ich aus lauter Verzweiflung die komplette Ladekontrolle neu implementiert. Dabei wurde die eigentliche Kontrolle über die QList<QImage> an den Hauptthread übertragen. Ich umreiße am Besten kurz die aktuelle Funktionsweise:
1. Hauptthread stellt fest, dass er neue Bilder benötigt. und setzt die nötigen Informationen über eine Funktion im Thread und setzt eine Statusvariable.
2. Der Thread wird gestartet und liest die Bilder in eine eigene Liste QList<QImage> ein und sendet ein Signal über die Beendigung des Ladevorgangs an den GUI-Thread.
3. Der Slot im GUI-Thread kopiert nun die Bilder in die Liste im GUI-Thread. Nach Abschluß wird die Statusvariable zurückgesetzt.
Fehlerbeschreibung Linux:
Solange der Aufruf und die Anzeige von Bildern in dem Intervall, in dem die Statusvariable gesetzt ist, unterbleibt, läuft das Programm ohne Probleme. Wird innerhalb des Ladevorgangs ein Bild aufgerufen, kann es unter nicht näher zu bestimmenden Umständen zum Programmabsturz kommen. Allerding geschieht dies nur innerhalb der Phase, in der der Thread die Bilder von der Festplatte liest und nicht im Laufe des Kopiervorgangs zwischen den Threads.
Fehlerbeschreibung Windows:
Der unter Linux beschriebene Fehler tritt ebenfalls unter Windows auf. Allerdings kommt es hier auch zum Programmabsturz, wenn der Zugriff auf die Liste im GUI-Thread während des Ladevorgangs unterbleibt. Auch bei der abgesicherten manuellen Navigation kann es zum Absturz kommen. Insgesamt stürzt das Programm unter Windows bedeutend häufiger ab als unter Linux, was für mich nicht nachvollziehbar ist.
Woran liegt es, dass das Programm unter Windows (XP SP2) wesentlich häufiger zum Absturz kommt als unter Linux? Wie kann es sein, dass beim Zugriff auf unterschiedlichen Instanzen von QList Elementen das Programm zum Absturz gebracht werden kann, auch wenn QList nicht thread-safe ist? Wie ist es möglich, diesen Fehler zu beheben? Ich bin mitr meinem Latein jetzt wirklich am Ende. Ich hoffe, dass es jemand gibt, der dieses Problem kennt, und/oder mir sagen kann, welchen Fehler ich begehe, der zu diesen Problemen führt.
Quelltexte:
http://www.berberich-is.de/forum/dia.zip
Vielen Dank
Heiko