Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Parameter an Thread übergeben

  Alt 2. Okt 2013, 08:59
Objekte, also auch VCL-Komponenten, werden immer als Referenz übergeben und in Referenzvariablen gespeichert.
Deine interne Record-Variable ist aber keine Referenz, sondern eine Kopie.
Delphi-Quellcode:
type
  PMyVar = ^TMyVar;

  TMyThread = class(TThread)
  private
    FExtVar: PMyVar;
    FMyVar: TMyVar;
    CopyToExtVar;
    DoOnTerminate; override;
  public
    {darf nur im constructor oder vor dem Resume aus dem Hauptthread aufgerufen werden}
    InitMyVar(var MV: TMyVar);
  end;

procedure TMyThread.InitMyVar(var MV: TMyVar);
begin
  {Verweis auf externe Variable}
  FExtVar := @MV;
  {Kopie der externen Variable}
  FMyVar := MV;
end;

procedure TMyThread.DoOnTerminate;
begin
  {wird beim Beenden im Thread aufgerufen}
  if Assigned(FExtVar) then
    Synchronize(CopyToExtVar);
  inherited;
end;

procedure TMyThread.CopyToExtVar;
begin
  {interne Variable in die externe Variable kopieren}
  if Assigned(FExtVar) then
    FExtVar^ := FMyVar;
end;
  Mit Zitat antworten Zitat