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.