![]() |
List of Tbitmaps gleichzeitig bearbeiten
der serielle code ohne OTL lib funktioniert,
mein OTL code funktioniert nicht , ich sehe meinen Fehler nicht
Delphi-Quellcode:
uses .... , OtlParallel, ...... ; type TMeinRecord = record x : Integer ; y : Integer; Name : String; Datum : Date; .... bmp : TBitmap end ; type Tmeinerecords = array of TmeinRecord Type TMyClass= Class public somerecords : Tmeinerecords; .... procedure Berechne(); procedure Berechne1Bild(); ..... end; procedure TMyClass.Berechne1Bild( I : Integer; abmp . TBitmap); begin .... end; procedure TMyClass.Berechne() var i : Integer; begin /// /// ohne OTL , dieser Code geht /// for i := Low(somerecords) to High(somerecords) do begin somerecords[i].bmp := TBitmap.Create; try Berechne1Bild(i, somerecords[i].bmp); finally end; /// /// mit OTL , dieser Code geht nicht /// Parallel.ForEach(0, High(somerecords)).Execute( procedure(const i: Integer) begin somerecords[i].bmp := TBitmap.Create; Berechne1Bild(i, somerecords[i].bmp); end ); end; |
AW: List of Tbitmaps gleichzeitig bearbeiten
Man müsste sich mal den Inhalt von Berechne1Bild anschauen.
Globale Variablen? VCL Objekte drin? Nicht threadsafe Funktionen drin? Wie wirkt sich "funktioniert nicht" aus? |
AW: List of Tbitmaps gleichzeitig bearbeiten
die laufvariable "i" ist möglicherweise nicht gesetzt.
Meines Wissens bietet ForEach keine Laufvariable an die genutzt werden könnte um i mit einem validen Wert zu belegen. Das war mumpitz.
Delphi-Quellcode:
Grüße
Parallel.ForEach(0, High(somerecords)).Execute(
procedure(const i: Integer) begin somerecords[i].bmp := TBitmap.Create; Berechne1Bild(i, somerecords[i].bmp); end ); Klaus |
AW: List of Tbitmaps gleichzeitig bearbeiten
Ich glaube, dass TBitmap nicht threadsafe ist. Es gibt noch so eine Hilfe mit CoInitialize oder so, hat bei mir zwar Verbesserungen gebracht, aber bei meinem letzten Vorhaben mit der OTL iVm. TBitmap habe ich es auch nicht 100% hingekriegt. Baue den CoInitialize mal bei dir ein, vielleicht hilft es bei dir. Letztendlich habe ich es letztes Mal so gelöst, dass ich das Bild in dem Thread mit TBitmap, das in dem Thread erzeugt wurde, bearbeitet und das Endergebnis in einem Stream geschrieben habe. Im Hauptthread habe ich den Stream wieder in TBitmap eingelesen. Aber genaueres können sicherlich hier im Forum ein paar Wissende es detailierter erklären. :wink:
|
AW: List of Tbitmaps gleichzeitig bearbeiten
TBitmap ist hier vermutlich der Übeltäter. Wenn nicht irgendwas von TBitmap ganz dringend gebraucht wird würde ich darauf verzichten.
Ich verwende zum bearbeiten von Bildern in Threads eine ganz simple Klasse in der die Bilder als RGBA (32Bit) array stecken. Wer alles braucht was man sich vorstellen kann sollte sich ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz