AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread mit komischem Verhalten

Ein Thema von Schwedenbitter · begonnen am 18. Jan 2016 · letzter Beitrag vom 19. Jan 2016
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 02:32
Bisher, bei den Dingen die ich bisher so in Threads gemacht habe, und Bitmaps waren dabei, war es eigentlich immer so, dass Ressourcen die ich in einem Thread-Kontext nutzen will, diese auch dort erzeugt werden müssen. Das heisst insbesondere bei der Delphi-RTL-Implementierung "TThread": Etwas, was im Konstruktor erzeugt wird, ist NICHT im Thread-Kontext, sonderm im Hauptthread erzeugt. 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. (Ich habe mir den Code jetzt nicht angeschaut um zu wissen ob das hier zutrifft, ich sollte eigentlich schleunigst ins Bett.) 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.
Meine Erfahrungen decken sich hier nicht mit Marcos Aussage.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Schwedenbitter

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

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 05: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 05:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz