Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Datei in eigenem Thread schreiben

  Alt 30. Nov 2011, 08:34
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat