AGB  ·  Datenschutz  ·  Impressum  







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

List of Tbitmaps gleichzeitig bearbeiten

Ein Thema von bernhard_LA · begonnen am 21. Jul 2021 · letzter Beitrag vom 25. Jul 2021
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

List of Tbitmaps gleichzeitig bearbeiten

  Alt 21. Jul 2021, 14:12
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;
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

AW: List of Tbitmaps gleichzeitig bearbeiten

  Alt 21. Jul 2021, 14:50
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?
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: List of Tbitmaps gleichzeitig bearbeiten

  Alt 21. Jul 2021, 14:54
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:
  Parallel.ForEach(0, High(somerecords)).Execute(
    procedure(const i: Integer)
    begin
      somerecords[i].bmp := TBitmap.Create;
      Berechne1Bild(i, somerecords[i].bmp);
    end );
Grüße
Klaus
Klaus

Geändert von Klaus01 (21. Jul 2021 um 15:03 Uhr)
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#4

AW: List of Tbitmaps gleichzeitig bearbeiten

  Alt 21. Jul 2021, 14:56
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.

Geändert von jus (21. Jul 2021 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
680 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: List of Tbitmaps gleichzeitig bearbeiten

  Alt 25. Jul 2021, 13:58
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 GR32 ansehen.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  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 00:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz