Warum so kompliziert? Bei BeginThread kann man doch einen Parameter übergeben. Man legt einfach eine Funktion (wie laut dokumentation beschrieben) an und nutzt den Parameter um die Instanz mitzugeben.
Delphi-Quellcode:
TMyClass = class
private
procedure ThreadProc();
public
procedure callThread();
end;
[...]
{global functions}
function GlobalThreadProc(Ptr: Pointer): DWORD;
begin
TMyClass(Ptr).ThreadProc();
end;
{class methods}
procedure TMyClass.ThreadProc();
begin
//Place Thread-code here
end;
procedure TMyClass.callThread();
begin
tHandle := BeginThread([...], @GlobalThreadProc, Self, [...]);
end;