Bisher (...) war es eigentlich immer so, dass Ressourcen die ich in einem Thread-Kontext nutzen will, diese auch dort erzeugt werden müssen. (...)
Nur Dinge die in der Execute-Methode erstellt werden sind auch wirklich im Thread-Kontext, und gerade bei so manchen Systemressourcen, und insbesondere bei
GDI-Zeug scheint das recht wichtig zu sein. (...) Und so lange man ein Bitmap in Thread-Kontext im selben Kontext auf die Platte schreibt, und nicht etwa noch fix auf einem Formular darstellen will, muss man sich
imho nichtmals um irgendwelche Synchronisierungen kümmern. (...)
Den Code hatte ich im ersten Post angehängt.
Aus diesen Gründe läuft es im Prinzip so, dass das Hauptprogramm die Bitmaps als Dateien im Temp-Verzeichnis ablegt. Dem Thread übergebe ich jeweils nur den Dateinamen als String.
In
Execute
erzeuge ich dann in jeder Schleife ein Bitmap. Verkürzt sieht das so aus:
Delphi-Quellcode:
Procedure TWorkThread.Execute;
Var
I : Integer;
aBMP : TBitmap;
Begin
While (Not Terminted) Do
Begin
For I:=0 To Pred(Length(fArray)) Do
Begin
If (Not fArray[I].Done) Then
Begin
fArray[I].Done:= True;
aBMP:= TBitmap.Create;
Try
aBMP.LoadFromFile(fArray[I].FileName);
With TPngImage.Create Do
Try
Assign(aBMP); // Bild übernehmen
SaveToFile(fArray[I].DestName);
Finally
Free;
End;
Finally
aBMP.Free;
End;
End;
End;
End;
End;