System.Classes.TThread.Synchronize
Delphi
procedure Synchronize(AMethod: TThreadMethod); overload; procedure Synchronize(AThreadProc: TThreadProcedure); overload; class procedure Synchronize(AThread: TThread; AMethod: TThreadMethod); overload; static; class procedure Synchronize(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* AThread, TThreadMethod AMethod)/* overload */; static void __fastcall Synchronize(TThread* AThread, _di_TThreadProcedure AThreadProc)/* overload */;
Inhaltsverzeichnis |
Eigenschaften
| Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
|---|---|---|---|---|
procedure function |
protected | 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 aktuelle Thread wird im Parameter AThread übergeben.
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 Asfü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.
Hinweis: Wenn Sie die statische Version der Methode Synchronize mitnil/NULLals der erste Parameter verwenden, wird die vonAMethodreferenzierte Methode im Haupt-Thread synchronisiert.
Synchronize kann bespielsweise zum Interagieren mit einer VCL-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);