Warum willst du es so umständlich machen? Mit Synchronize geht es doch ganz einfach. Also genau so, wie du es zu Anfang schon geschrieben hast, nur dass du statt
Delphi-Quellcode:
procedure TMyThread.Execute;
var
str: String;
begin
str:='Hallo, ich bin ein Test';
s^:=str;
end;
einfach
Delphi-Quellcode:
procedure TMyThread.foo;
var
str: String;
begin
str:='Hallo, ich bin ein Test';
s^:=str;
end;
procedure TMyThread.Execute;
begin
Synchronize(foo);
end;
schreibst.