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;