nach dem der neue Thread angelaufen ist, must Du dort in einer lokalen Variable den Zählerstand zum Zeitpunkt des Thread-Startes zwischenspeichern....
ansonsten gilt der Wert der globalen Variable für jeden Thread und jeden Schleifendurchgang...
Delphi-Quellcode:
var
COUNTER: Integer = 0;
////////////////////////////////////////////////////////////////////////////////
// procedure StarteThread;
// Korrekte Signatur ist:
Function StarteThread(Parameter : Pointer) : LongWord;
StdCall;
var
ID,
I: Integer;
begin
ID := InterlockedIncrement(COUNTER);
// Zähler atomar (unteilbar, serialisiert) inkrementieren, und Resultat zwischenspeichern
for I := 0
to 100
do begin
Form1.ListBox1.Items.Add('
Thread: '+IntToStr(ID)+'
Schleifendurchlauf: '+IntToStr(I));
// dies ist unschön, da VCL nicht thread-safe... Quelle für lästige Bugs...
// bei produktiven Anwendungen mittels Synchronize() auskoppeln, oder ganz auf Messages umstellen
SendMessage(Form1.ListBox1.Handle,WM_VSCROLL,SB_BOTTOM,0);
Sleep(100);
end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
TID: cardinal;
begin
CreateThread(0,0,@StarteThread,0,0,TID);
end;
////////////////////////////////////////////////////////////////////////////////