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 */;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
procedure function |
public | System.Classes.pas System.Classes.hpp |
System.Classes | TThread |
説明
main スレッド内で、メソッド呼び出しを実行します。
Synchronize は、AMethod
で指定されている呼び出しを main スレッドを使用して行い、それによってマルチスレッドの競合を避けます。 AThread
パラメータは、呼び出し側スレッドを関連付けます。
static メソッドについては、AThread
パラメータを使用して、AMethod
をどのスレッドにも関連づけられます。 また、main スレッド内の呼び出し側スレッドについての情報を知る必要がない場合には、nil/NULL を AThread
パラメータに使用することも可能です。
現在の実装では、Synchronize メソッドは、関連付けられているスレッド情報を使用して、Windows プラットフォームで main スレッドを起こせます。
メソッドの呼び出しがスレッドセーフかどうかわからない場合は、そのメソッドを Synchronize メソッド内から呼び出して、確実にメイン スレッドで実行されるようにします。
現在のスレッドの実行は、指定されたメソッドが main スレッドで実行されている間は、保留されます。
警告: メイン スレッド内から Synchronize を呼び出さないでください。 無限ループが発生する可能性があります。
メモ: また、クリティカル セクションや多重読み取り排他書き込みのシンクロナイザを使って、スレッドセーフでないメソッドを保護することもできます。
Synchronize をどのようなときに使うかの例としては、VCL または FireMoneky コンポーネントとのやりとりをしたい場合などが挙げられます。 インプレース匿名メソッドを使用して、変数を同期を取りたいメソッドに渡す際の問題を解決します。
Synchronize(
procedure
begin
Form1.Memo1.Lines.Add(‘Begin Execution’);
end);