System.Classes.TThread.Synchronize

提供: Appmethod Libraries
移動先: 案内検索

Object Pascal

procedure Synchronize(AMethod: TThreadMethod); overload;
procedure Synchronize(AThreadProc: TThreadProcedure); overload;
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


説明

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

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

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

現在の実装では、Synchronize メソッドは、関連付けられているスレッド情報を使用して、Windows プラットフォームで main スレッドを起こせます。

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

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

警告: メイン スレッド内から Synchronize を呼び出さないでください。 無限ループが発生する可能性があります。

メモ: また、クリティカル セクションや多重読み取り排他書き込みのシンクロナイザを使って、スレッドセーフでないメソッドを保護することもできます。

Synchronize をどのようなときに使うかの例としては、VCL または FireMoneky コンポーネントとのやりとりをしたい場合などが挙げられます。 インプレース匿名メソッドを使用して、変数を同期を取りたいメソッドに渡す際の問題を解決します。

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

関連項目

コード サンプル