Ich muss mich heute noch mal zurückmelden:
Wenn ich eine einfache for loop teste:
Delphi-Quellcode:
CheckSynchronize;
Tparallel.For(1, 10,
Procedure(I: Integer)
Begin
// CheckSynchronize;//?? macht keinen Unterschied
Writeln(I);
End);
, dann komme ich beim Debuggen
in
Unit <system.threading>, l. 1583
Delphi-Quellcode:
class function TParallel.&For(ALowInclusive, AHighInclusive: Integer; const AIteratorEvent: TProc<Integer>): TLoopResult;
begin
Result := ForWorker(..)
end;
Dann kann ich nach l. 3100 und springen:
Delphi-Quellcode:
class function TThreadPool.GetCurrentThreadPool: TThreadPool;
..
Hier wird dann auch eine entsprechende instanz zurückgegeben
allerdings hängt die Ausführung in der class procedure
Delphi-Quellcode:
class function TParallel.ForWorker(..)
//..
//l. 1414:
RootTask.Start.Wait;
//also scheint der "roottask" thread in dem fall nicht gestartet, denn er wartet an der Stelle vergeblich
//nach erfolgter Ausführung der function ttask.start:itask
Macht das irgendeinen Sinn? Ich meine, ich kann auch einen ganz normalen Thread laufen lassen (so hab ich z.b. einen "working indicator" im Hintergrund (ne Art "ladebalken, der mir einfach eine bestimmte Zeichenfolge -/-\...) ausgibt. Der läuft auch einwandfrei, (ist natürlich aber auch von nichts externem abhängig).
BTW, konnte das Problem jemand reproduzieren anhand der Anhänge?
Vielen Dank