@Sunlight7: hä ? wo ist jetzt der entscheidende Unterschied ?
das Problem ist, dass der Record auf dem Stack der Thread-startenden Funktion liegt... je nach Laune des Schedulers kann es nun sein, dass der Thread erst anläuft, wenn die Funktion bereits wieder verlassen wurde (sprich: der Stack wieder abgeräumt ist)...
Lösung: Record im Heap deponieren...
Delphi-Quellcode:
PParamRecord = ^TParamRecord;
TParamRecord = record
Nr : Integer;
end;
//[.....]
procedure TForm1.Button1Click(Sender: TObject);
var
id : LongWord;
Params: PParamRecord; //***
begin
for I := 1 to 50 do begin
new(Params);//***
Params^.Nr = I;
BeginThread(nil,
0,
Addr(StarThread),
Params,//***
0,
id);
end;
end;
Delphi-Quellcode:
function StarThread(Paramter: Pointer): Integer;
var
Params : TParamRecord;
begin
Params := PParamRecord(Paramter)^; //***
Dispose(PParamRecord(Paramter)); //***
Form1.Memo1.Lines.add('Angekommen mit '+IntToStr(Params.Nr));
end;