Im Prinzip sollte die Abarbeitung so aussehen.
Delphi-Quellcode:
procedure TXXXThread.Execute;
var nIdx: integer;
begin
nIdx:= 0;
repeat
try
cs.enter;
if liste.Count >= nIdx then
begin
machwas mit liste[nidx];
inc(nIdx);
end;
// evtl. nIdx auf 0 setzen wenn liste.count < nIdx
finally
cs.leave;
end;
until (Idx >= liste.count) or (liste.count = 0) or Application.Terminate;
end;