System.Classes.TThread.Synchronize
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 */;
Inhaltsverzeichnis
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.
Beispielsweise können Sie Synchronize verwenden, wenn Sie entweder mit einer VCL- oder einer FireMonkey-Komponente interagieren möchten. Verwenden Sie eine anonyme In-Place-Methode, um das Problem der Übergabe von Variablen an die Methode, die Sie synchronisieren möchten, zu lösen.
Delphi:
Synchronize(
procedure
begin
Form1.Memo1.Lines.Add('Begin Execution');
end);
C++:
String timeStarted = DateTimeToStr(Now());
TThread::CreateAnonymousThread(
[timeStarted]() {
LengthyOperation(); // Some lengthy work done in worker thread
TThread::Synchronize(nullptr, _di_TThreadProcedure([timeStarted] {
ShowMessage(String("DONE: Job started @ ")+timeStarted);
}));
})->Start();
Siehe auch
- System.Classes.TThreadMethod
- System.Classes.TThread.Execute
- System.Classes.TThread.Queue
- System.Classes.TThread.OnTerminate
- System.SyncObjs.TCriticalSection
- System.SysUtils.TMultiReadExclusiveWriteSynchronizer
- System.Classes.CheckSynchronize
- Haupt-VCL-Thread benutzen