Einzelnen Beitrag anzeigen

Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: DLL Tparallel.for loop deadock

  Alt 10. Okt 2021, 20:39
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

Geändert von Sequitar (10. Okt 2021 um 20:49 Uhr)
  Mit Zitat antworten Zitat