System.Classes.TThread.Synchronize

提供: RAD Studio API Documentation
移動先: 案内検索

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 */;

プロパティ

種類 可視性 ソース ユニット
procedure
function
public
System.Classes.pas
System.Classes.hpp
System.Classes TThread


説明

メソッド呼び出しをメイン スレッド内で実行します。

Synchronize は、AMethod で指定された呼び出しを、main スレッドを使用して実行させます。これによりマルチスレッド競合が回避されます。AThread パラメータは、呼び出し側のスレッドを関連付けます。

静的メソッドの場合、AMethodAThread パラメータを使用してスレッドと関連づけることができます。また、main スレッドにおいて呼び出し側のスレッドの情報を知る必要がない場合には、nil/NULLAThread パラメータとして使用することも可能です。

現在の実装では、Windows プラットフォーム上で、Synchronize メソッドは、関連づけられたスレッド情報を使用して、main スレッドをウェイクアップさせることができます。

メソッド呼び出しがスレッドセーフかどうか確信が持てない場合には、それを Synchronize メソッド内部から呼び出し、確実に main スレッド内から実行されるようにします。

現在のスレッドの実行は、メソッドが main スレッド内で実行されている間、保留されます。

メモ: main スレッドから Synchronize を呼び出すことは安全です。
メモ: また、安全ではないメソッドを、重要なセクションやマルチリードの排他書き込みシンクロナイザを使用することで、保護することができます。

Synchronize をいつ使用できるかの 1 例は、VCL や FireMonkey コンポーネントとやり取りしたいときです。所定の位置で匿名メソッドを使用して、同期をとりたいメソッドに変数を渡す際の問題を解決します。

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();

関連項目

コード サンプル