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.

Hinweis: Der Aufruf von Synchronize aus dem Haupt-Thread ist sicher.
Hinweis: Sie können unsichere Methoden auch durch kritische Abschnitte oder die Synchronisierungsfunktion schützen, die mehrere Leseoperationen, aber nur eine exklusive Schreiboperation zulässt.

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

Codebeispiele