System.Classes.TThread.Queue
Delphi
procedure Queue(AMethod: TThreadMethod); overload; inline;
procedure Queue(AThreadProc: TThreadProcedure); overload; inline;
class procedure Queue(const AThread: TThread; AMethod: TThreadMethod); overload; static;
class procedure Queue(const AThread: TThread; AThreadProc: TThreadProcedure); overload; static;
C++
void __fastcall Queue(TThreadMethod AMethod)/* overload */;
void __fastcall Queue(_di_TThreadProcedure AThreadProc)/* overload */;
static void __fastcall Queue(TThread* const AThread, TThreadMethod AMethod)/* overload */;
static void __fastcall Queue(TThread* const AThread, _di_TThreadProcedure AThreadProc)/* overload */;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
procedure function |
public | System.Classes.pas System.Classes.hpp |
System.Classes | TThread |
説明
main スレッド内で、メソッド呼び出しを実行します。
Queue により、main スレッドを使用して非同期に実行される AMethod
で指定される呼び出しが行われ、それによってマルチスレッドの競合が回避されます。
- 警告:呼出し側スレッドが main スレッドの場合、Queue は呼び出しを直接実行します(同期的に)。この場合、ForceQueue を使用すると、main スレッド内のメソッド呼び出しの実行をキューに入れます。
AMethod
は、呼び出し側スレッドを関連付けます。
- static メソッドについては、
AThread
パラメータを使用して、AMethod
をどのスレッドにも関連づけられます。 - main スレッド内の呼び出し側スレッドについての情報を知る必要がない場合には、
nil/NULL
をAThread
パラメータに使用することも可能です。 - RemoveQueuedEvents は、このスレッド情報を使用し、適切なキュー メソッドを見つけます。
メソッドの呼び出しがスレッドセーフかどうかわからない場合は、そのメソッドを Synchronize メソッドまたは Queueメソッド内から呼び出して、確実にメイン スレッドで実行されるようにします。
Synchronize とは違って、現在のスレッドの実行が継続されます。 メイン スレッドは、最終的にキューに入っているすべてのメソッドを処理します。
メモ: また、クリティカル セクションや多重読み取り排他書き込みのシンクロナイザを使って、スレッドセーフでないメソッドを保護することもできます。
関連項目
- System.Classes.TThread.Execute
- System.Classes.TThread.Synchronize
- System.Classes.TThread.RemoveQueuedEvents