Der Zugriff auf FBilder muss durch eine Critical Section abgesichert werden.
Na gut, na gut. Das habe ich nun gemacht.
self.Priority:=tpIdle;
Natürlich macht der Thread so nur was, wenn der Hauptthread gerade nichts zu tun hat.
Beim Erzeugen des Formulars ist der Hauptthread aber schon beschäftigt.
Das verstehe ich nicht ganz. Vom Grundsatz her ist mir das klar. Aber der Thread wird doch erst erzeugt und gestartet, wenn man auf den Button "Scannen" klickt. Da ist doch das Formular bereits erzeugt worden, oder wo ist mein Denkfehler.
Es läuft jetzt übrigens auf einem Testrechner seit mehr als 2 Stunden problemlos. Sorgen bereitet mir nur, dass FastMM mir 3 - wenn auch mit 620 Bytes sehr kleine - Speicherlecks bringt. Ich habe das Programm bereits mit Debug-
DCU, map-Dateien etc. pp. compiliert. Allerdings kommen immer Meldungen mit TButton, TDialog usw. Die werden zwar vom Hauptprogramm verwendet. Ich dachte aber, dass sich der Compiler bei entsprechenden Komponenten selbst um die Freigabe kümmert...
Ich würde - falls noch jemand Muße hat - den aktuellen Code nochmal hochladen.
Am Schluss noch eine allgemeine, vielleicht auch marginale Frage:
Im Moment schicke ich vom Thread Ereignisse an den HauptThread und zwar so:
Delphi-Quellcode:
Procedure TSaveThread.MessageNext;
Begin
If Assigned(FOnNext) Then
FOnNext(self, FNext);
End;
Procedure TSaveThread.Execute;
Begin
While (Not Terminated) Do
Begin
... // <- tu irgendwas
Syncronize(MessageNext);
End;
End;
Kann man das bedenkenlos auch so machen:
Delphi-Quellcode:
Procedure TSaveThread.MessageNext;
Begin
FOnNext(self, FNext);
End;
Procedure TSaveThread.Execute;
Begin
While (Not Terminated) Do
Begin
... // <- tu irgendwas
If Assigned(FOnNext) Then
Syncronize(MessageNext);
End;
End;
Dann würde er nämlich nicht erst Syncronize aufrufen und in die andere Procedure springen müssen, wenn er vorher prüft, ob das Ereignis überhaupt zugewiesen ist.
Die 1. Variante habe ich mehrfach gesehen und gehe deshalb davon aus, dass sie richtig ist. Spricht etwas gegen die 2. Variante?
Gruß, Alex