Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#13

AW: TObjectList-Einträge auf meherere Threads aufteilen

  Alt 19. Jan 2021, 13:24
Ich habe das TFor.Parallel noch immer nicht richtig verstanden.

Wenn ich 20 Dateien habe und 2 Threads daraus machen möchte, wie genau zählt Schleife 1 und wie Schleife 2?
Fängt Schleife 1 an zu zählen bei Index 0 an bis 9 und Schleife bei 10 von 19 ?
Weil ich brauche in irgendeiner Art und Weise eine Schleifenvariable die ich in jeder dieser For-Dinger nutzen kann. Ich muss wissen wann "0" ist.

Bei 0 erstelle ich eine temporäre ObjectList. Bei Index = MaxForFürDiesenDurchgang erzeuge ich den Thread.
Lös dich doch mal von deinem Thread, der mehrere Einträge aus einer temporären Liste bearbeitet.
Das TParallel.For behandelt alle Listeneinträge von 0 bis Count - 1 (Danke Sebastian), wobei die Arbeit an einem Eintrag innerhalb der anonymen Methode erfolgt.

Stell dir das erstmal wie bei einer ganz normalen Schleife vor:
Delphi-Quellcode:
for I := 0 to MainProcessFileList_ObjectList.Count - 1 do
begin
  { Tue was mit MainProcessFileList_ObjectList[I] }
end;
Willst du das parallel mit 8 Threads erledigen, schreibst du das so:
Delphi-Quellcode:
MaxThreadCount := 8;
FilesPerThread := MainProcessFileList_ObjectList.Count div MaxThreadCount;
TParallel.For(FilesPerThread, 0, MainProcessFileList_ObjectList.Count - 1,
  procedure(Index: Integer)
  begin
    { Tue was mit MainProcessFileList_ObjectList[Index] }
  end);
Das { Tue was mit MainProcessFileList_ObjectList[I] } versteckt sich aktuell noch irgendwo in der Execute Methode deines Threads. Insofern ist das eben nicht egal. Vielleicht passiert innerhalb dieser Methode ja auch etwas, dass diesen Ansatz unmöglich macht oder eine Änderung dessen erfordert, aber das wissen wir nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat