Discussion:
Threads debuggen
(zu alt für eine Antwort)
Jens Köhler
2015-03-08 17:16:26 UTC
Permalink
Hallo,

ich lade Bilder in Threads vom Internet.
im Execute wir das jeweilige Bild in einen Stream geladen und
mit Synchronize(SaveImage) wird das Bild sowohl auf die
Festplatte geschrieben als auch in das Object für Anzeige geladen.

in OnTerminate wird der Threads freigegeben, per PostMessage
das Hauptprogramm informiert, das ein Bild geladen wurde,
um die Anzeige neu aufzubauen, und, wenn vorhanden, ein neuer
Threads aus der Warteschlange genommen und gestartet.

Das funktioniert im großen und ganzen. Ab und zu erhalte ich aber
einen Fehler: erst ein Fenster (machmal auch 2 o. 3 kurz hintereinander)
Zugriffsverletzung an Adresse sowieso und nach dem Bestätigen
die Meldung Win32-Fehler Code 5 Zugriff verweigert.

Wie findet man Fehler in Threads bzw. hat jemand eine Idee, wie ich
diesen Fehler beseitigt kriege?

Grüße
Jens
Jens Köhler
2015-03-14 13:08:18 UTC
Permalink
Post by Jens Köhler
Hallo,
Ab und zu erhalte ich aber
einen Fehler: erst ein Fenster (machmal auch 2 o. 3 kurz hintereinander)
Zugriffsverletzung an Adresse sowieso und nach dem Bestätigen
die Meldung Win32-Fehler Code 5 Zugriff verweigert.
Wie findet man Fehler in Threads bzw. hat jemand eine Idee, wie ich
diesen Fehler beseitigt kriege?
Hallo,

kann es sein, das sich die Zugriffe auf die JobListe, (ein TList)
wenn im OnTerminate einen Thread aus der Liste genommen wird,
um ihn zu starten und das evtl. gleichzeitige hinzufügen eines
neuen Job zur Liste vom Hauptprogramm in die Quere kommen?
Oder gleichzeitige OnTerminates bei gleichzeitig fertigen Threads?
Wenn, wie verhindert man so was?
D5 WinXP

Jens
Hans-Peter Diettrich
2015-03-14 13:46:45 UTC
Permalink
Post by Jens Köhler
Post by Jens Köhler
Hallo,
Ab und zu erhalte ich aber
einen Fehler: erst ein Fenster (machmal auch 2 o. 3 kurz hintereinander)
Zugriffsverletzung an Adresse sowieso und nach dem Bestätigen
die Meldung Win32-Fehler Code 5 Zugriff verweigert.
Wie findet man Fehler in Threads bzw. hat jemand eine Idee, wie ich
diesen Fehler beseitigt kriege?
MadExcept, FastMM4?
Post by Jens Köhler
kann es sein, das sich die Zugriffe auf die JobListe, (ein TList)
wenn im OnTerminate einen Thread aus der Liste genommen wird,
um ihn zu starten und das evtl. gleichzeitige hinzufügen eines
neuen Job zur Liste vom Hauptprogramm in die Quere kommen?
Oder gleichzeitige OnTerminates bei gleichzeitig fertigen Threads?
Wenn, wie verhindert man so was?
Läuft denn OnTerminate im Thread oder Main-Thread?
Ggf. eine Message an den Main-Thread schicken, der soll sich dann um die
Verwaltung kümmern.
Post by Jens Köhler
D5 WinXP
Gibt's da schon TThreadList?

Vorsicht, die aktuelle Version von FastMM4 konnte ich unter D5 nicht zum
Laufen bekommen, aber was altes tut's auch. Was sehr altes, gut aufbewahren!

DoDi
Jens Köhler
2015-03-14 19:56:18 UTC
Permalink
Post by Hans-Peter Diettrich
Läuft denn OnTerminate im Thread oder Main-Thread?
Gibt's da schon TThreadList?
DoDi
ich gehe davon aus, im Main-Thread.

ThreadList gibt es. Werde ich mal probieren.

Danke
Jens
M. Behrendt
2015-03-16 09:55:55 UTC
Permalink
Post by Jens Köhler
Hallo,
Wie findet man Fehler in Threads bzw. hat jemand eine Idee, wie ich
diesen Fehler beseitigt kriege?
Fehler findet man z.B. auch, wenn jeder thread sein eigenes Logfile auf die Platte schreibt mit allen Variableninhalten, die gerade verwendet werden
dazu braucht der thread eine eindeutige Nummer, und die Zeitangabe im Logfile nicht vergessen
bevor der thread geschlossen wird, logfile füllen, flushen und schliessen

ich hatte dafür eine eigene procedure TForm1.ThreadsTerminate;

onterminate in den Mainthread
Rechenthread.OnTerminate := Form1.ThreadsTerminate;
Jens Köhler
2015-03-17 15:13:56 UTC
Permalink
Post by Jens Köhler
Hallo,
ich lade Bilder in Threads vom Internet.
Wie findet man Fehler in Threads bzw. hat jemand eine Idee, wie ich
diesen Fehler beseitigt kriege?
Grüße
Jens
Hallo,

ich habe das Problem gelöst bzw. umgangen.
Die Umstellung auf ThreadList hat nicht viel gebracht, erst 20 ms
Wartezeit nach dem speichern haben das Problem verschwinden lassen.
Da ich aber die eigentliche Ursache nicht gefunden habe, kommt es zu
den später zu überprüfenden Merkwürdigkeiten in die ToDo-List.
Da werde ich dann auch die Variante mit dem Logfile probieren.

Vielen Dank
Jens

Loading...