Der Thread wird erst gestartet, wenn Du myThread.Start aufrufst. Daher kannst Du einfach die Instanz der Threadklasse erstellen, die Daten die der Thread für seine Arbeit braucht über Properties mitgeben und dann erst den Thread starten.
Diese Aussage trifft nur für den Fall zu, wenn der Thread mit
CreateSuspended = True
erzeugt wird - und bei Delphi 6 wird der Thread dann mit
Resume
angestossen (
IMHO gibt es da noch kein
Start
).
Wir haben hier aber eh einen anderen Ansatz:
Delphi-Quellcode:
type
TMyThread = class( TThread )
private
fSource : TMySource;
public
constructor Create( CreateSuspended : Boolean; ASource : TMySource );
end;
constructor TMyThread.Create;
begin
fSource := ASource;
inherited Create( CreateSuspended );
end;
Generell ist hierbei zu sagen, dass jeder Zugriff immer im Thread-Kontext des Aufrufers erfolgt.
Wird also vom MainThread aus
TMyThread.Create
aufgerufen, so wird dieses auch komplett im Thread-Kontext des MainThreads ausgeführt.
Also die direkte Übergabe als Parameter in TThread.Create ist also erst mal safe.
Ein kleines Problemen bleibt aber
Wenn man dem Thread ein Objekt übergibt, dann könnte dieses Objekt ja im MainThread (oder auch irgendeinem anderen Thread) verändert werden (bis hin zum Free). Aus diesem Grund würde es im Allgemeinen schon sinnvoll sein, das der Thread sich eine Kopie anlegt oder auch eine Kopie erhält.