Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Apr 2015
AddPoolWithParams bekommt einen "Zeiger" auf die Prozedur und die Parameter rein und ruft diese Prozedur intern auf.
Bei TThreadPool.Default.QueueWorkItem(machwas(bla)); würde erst machwas ausgeführt und dann dessen Result als Parameter in QueueWorkItem reingegeben.
Siehe ShowMessage(IntToStr(123)); ... S:=IntToStr(123); ShowMessage(S); :zwinker:
Delphi legt solche gesharedten Variablen...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Apr 2015
Jupp. Es gibt eine Reihe vordefinierter generischer Typen, welche man benutzen kann.
type
TArray<T> = array of T;
TProc<T> = procedure(A: T);
TProc<T,T2> = procedure(A: T; A2: T2);
TProc<T,T2,T3> = procedure(A: T; A2: T2; A3: T3);
...
Also praktisch ganz einfach so
class procedure TMeinHelper.AddToPool<T,T2>(P: TProc<T,T2>; A: T; A2: T2); // leider können einfache Funktionen...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Apr 2015
S := 123; // lokale Vaiable oder Parameter der übergeordneten Prozedur
TThreadPool.Default.QueueWorkItem(procedure
begin
TestPing(123, S);
end);
Wichtig, das darf so nicht in einer Schleife aufgerufen werden.
z.B. als AddToPool wegkapseln, oder noch besser, QueueWorkItem erweitern (ableiten oder ClassHelper) und den oberen Code dort rein (TestPing als Parameter TProc<T1,T2>)