Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Liste von Prozeduren als Thread starten (https://www.delphipraxis.net/167711-liste-von-prozeduren-als-thread-starten.html)

luke2 14. Apr 2012 14:56

Delphi-Version: XE2

Liste von Prozeduren als Thread starten
 
Hallo,

Angenommen ich habe ein Array von Prozedurnamen
Delphi-Quellcode:
var a:array[0..2] of string = ('f1', 'f2', 'f3');

procedure f1(p:pointer);
begin

end;

...
Gibt es eine einfache Möglichkeit dieses Array mit einer for-Schleife zu durchlaufen, um alle Prozeduren in einem Thread zu starten?

Ungefähr so:
Delphi-Quellcode:
for i := low(a) to high(a) do beginthread(nil, 0, @a[i], nil, 0, c);

sx2008 14. Apr 2012 15:08

AW: Liste von Prozeduren als Thread starten
 
Eine einfache Möglichkeit gibt es nicht, weil Delphi von einem String nicht auf die Adresse einer Funktion schliesen kann.
Man benötigt schon etwas mehr Aufwand als bei dynamischen Scriptsprachen.
Delphi-Quellcode:
type
  TMyFunc = procedure(p:Pointer);

  TMyFuncRec = record
    name:string;
    func:TMyFunc
  end;

const
  funclist = array[0..1] of TMyFuncRec =
((name:'f1'; func:@f1),
((name:'f2'; func:@f2));
Aber sag mal wozu brauchst du dass denn?
Willst du dir einen eigenen Threadpool bauen?

jfheins 14. Apr 2012 15:09

AW: Liste von Prozeduren als Thread starten
 
Nein.
Die Namen der Funktionen sind i.d.R. nicht mehr im Compilat enthalten. Debuginfos oder RTTI (bei Klassen) könnten da sein, aber eine schöne Lösung ist das nicht ;-)

Für so etwas würde ich eine List<TThread> (oder sowas in der Richtung) hernehmen, da wäre das dann überhaupt kein Problem...

luke2 14. Apr 2012 15:39

AW: Liste von Prozeduren als Thread starten
 
Danke, ich werde es so wie sx2008 vorgeschlagen hat, probieren.
Nein, nicht für einen ThreadPool, ich wollte meinen Code damit nur etwas dynamischer machen.


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