In deinem Fall fängt jeder Thread bei Index 0 an. Solange also der Sync nicht erfolgt arbeiten alle Threads den gleichen Eintrag ab. Besser wäre hier eine Art Queue (Qarteschlange) in Form von TThreadList, in die Du Aufgaben Reinstellst, die jeder Thread abholen kann. Das Reinstellen und Abholen muss natürlich synchronisiert werden (TThreadList.LockList).
In etwa:
Code:
Unit MyThread;
Var
MainList: TThreadList;
procedure Thread.Execute;
Var
List: TList;
Entry: TObject; // oder was auch immer du in der Liste hast
begin
List := MainList.LockList;
Entry := List.Items[0];
List.Delete(0);
MainList.UnLockList;
// Verarbeiten:
If Entry.Aufgabe = eaLesen then
begin
// ...
end;
Entry.Free;
end;
procedure Button1Click(Sender....);
Var
List: TList;
begin
// Eintrag hinzufügen Bsp.
List := MainList.LockList;
List.Add(MyObject);
MainList.UnLockList;
end;
Ist nur eine Grobe Ablaufbeschreibung.