System.Classes.TThread.Synchronize

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

procedure Synchronize(AMethod: TThreadMethod); overload; inline;
procedure Synchronize(AThreadProc: TThreadProcedure); overload; inline;
class procedure Synchronize(const AThread: TThread; AMethod: TThreadMethod); overload; static;
class procedure Synchronize(const AThread: TThread; AThreadProc: TThreadProcedure); overload; static;

C++

void __fastcall Synchronize(TThreadMethod AMethod)/* overload */;
void __fastcall Synchronize(_di_TThreadProcedure AThreadProc)/* overload */;
static void __fastcall Synchronize(TThread* const AThread, TThreadMethod AMethod)/* overload */;
static void __fastcall Synchronize(TThread* const AThread, _di_TThreadProcedure AThreadProc)/* overload */;

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
procedure
function
public
System.Classes.pas
System.Classes.hpp
System.Classes TThread


Beschreibung

Führt einen Methodenaufruf im Haupt-Thread aus.

Synchronize bewirkt, dass der von AMethod festgelegte Aufruf im Haupt-Thread ausgeführt wird. Dabei werden Multithread-Konflikte verhindert. Der Parameter AThread wird dem Thread des Aufrufers zugeordnet.

Für statische Methoden können Sie AMethod jedem Thread mithilfe des Parameters AThread zuordnen. Außerdem können Sie nil/NULL als Parameter AThread verwenden, wenn Sie die Informationen für den Thread des Aufrufers im Haupt-Thread nicht brauchen.

In der aktuellen Implementierung kann die Methode Synchronize Informationen von dem zugeordneten Thread verwenden, um den Haupt-Thread auf Windows-Plattformen zu aktivieren.

Wenn Sie nicht genau wissen, ob eine Methode Thread-sicher ist, rufen Sie sie aus der Methode Synchronize auf, um zu gewährleisten, dass sie im Haupt-Thread ausgeführt wird.

Die Ausführung des aktuellen Threads wird während der Ausführung der Methode im Haupt-Thread ausgesetzt.

Warnung: Rufen Sie Synchronize nicht aus dem Haupt-Thread auf. Dies kann zu einer Endlosschleife führen.

Hinweis: Unsichere Methoden können auch mit den kritischen Abschnitten oder mit TMultiReadExclusiveWriteSynchronizer-Objektes geschützt werden.


Synchronize kann bespielsweise zum Interagieren mit einer VCL- oder einer FireMonkey-Komponente verwendet werden. Mit einer anonyme In-Place-Methode können Sie die Probleme bei der Übergabe von Variablen an die zu synchronisierende Methode lösen:

Synchronize(
  procedure
  begin
    Form1.Memo1.Lines.Add(Begin Execution);
  end);

Siehe auch

Codebeispiele