Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   MultiThreading (https://www.delphipraxis.net/217091-multithreading.html)

DerMondistunsereSonne 25. Apr 2025 11:19

Delphi-Version: 5

MultiThreading
 
Moin,

Keine Ahnung ob es der richtige Bereich ist, ansonsten einfach verschieben ;)

Also mein Anliegen: Ich möchte gerne beim Laden meines Programmes eine Datei auslesen und das Ergebnis in einer globalen Variablen halten. Der Vorgang dauert ggf. einige Zeit, so dass ich es gerne in einen separten Thread verlagern möchte. Das Ergebnis soll eine TStringList o.ä. sein. Es handelt sich dabei nur um die Zuordnung von einer ID zu einem String.

Desweiteren möchte ich gerne bei einem Aufruf eines Formulars überprüfen, ob es neue Einträge gibt, wenn ja, dann hinzufügen, sonst nichts machen.

Das funktioniert singlethread bereits alles so, wie es soll. Allerdings benötigt der Aufbau der Liste ~5 Sekunden, was zu lang ist.

Und zu guter Letzt: Wenn in dem Form die Liste verwendet wird, soll geschaut werden, ob sie sich noch im Aufbau befindet, dann warten, sonst benutzen.

Alle Klarheiten beseitigt? Gerne ein wenig Beispielcode damit komme ich meist besser zu recht.

Danke!

PS Delphi 12

Edelfix 25. Apr 2025 11:35

AW: MultiThreading
 
Würde ich so eins zu eins in ChatGPT eingeben. "Danke!" könnte man weg lassen.

DerMondistunsereSonne 25. Apr 2025 11:46

AW: MultiThreading
 
Spitzenantwort, ich nutze kein ChatGPT und habe gestern im Radio erfahren, dass Höflichkeiten bei der Verwendung sehr viele Ressourcen binden.

Edelfix 25. Apr 2025 11:58

AW: MultiThreading
 
Kann sein das ich dich falsch verstanden habe. Was genau ist deine Frage?

Uwe Raabe 25. Apr 2025 12:30

AW: MultiThreading
 
Delphi-Quellcode:
unit uMyList;

interface

function MyList: TStringList;

implementation

uses
  System.Threading;

var
  InternalFuture: IFuture<TStringList>;
  InternalList: TStringList;

function MyList: TStringList;
begin
  Result := InternalFuture.Value;
end;

initialization
  InternalList := TStringList.Create;
  InternalFuture := TTask.Future<TStringList>(
    function: TStringList
    begin
      Result := InternalList;
      for var I := 1 to 10000000 do
        Result.Add(I.ToString);
    end);
finalization
  InternalList.Free;
  InternalList := nil;
end;
Der Zugriff im Form auf MyList wartet bei Bedarf auf die Fertigstellung.

DerMondistunsereSonne 25. Apr 2025 12:38

AW: MultiThreading
 
Danke Uwe, ich probiere es mal damit.

@Edelfix Wie man so etwas am geschicktesten angeht.

DerMondistunsereSonne 25. Apr 2025 13:36

AW: MultiThreading
 
Hat funktioniert, vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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