Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 06:35
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;
Alex Winzer

Geändert von Schwedenbitter (19. Jan 2016 um 06:40 Uhr)
  Mit Zitat antworten Zitat