Thema: Delphi Threads Parameter

Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: Threads Parameter

  Alt 24. Sep 2006, 21:19
@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;
  Mit Zitat antworten Zitat