agent クラス
すべての独立エージェントの基底クラスとして使用されるクラスです。 他のエージェントに状態が表示されないようにしたり、メッセージ渡しでやり取りしたりする目的で使用されます。
構文
class agent;
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
agent | 過負荷です。 エージェントを構築します。 |
~agent デストラクター | エージェントを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
cancel | エージェントを agent_created 状態または agent_runnable 状態から agent_canceled 状態に移行します。 |
start | エージェントを agent_created 状態から agent_runnable 状態に移行し、実行をスケジュールします。 |
status | エージェントの状態情報の同期ソース。 |
status_port | エージェントの状態情報の非同期ソース。 |
待機 | エージェントがタスクを完了するまで待機します。 |
wait_for_all | 指定されたすべてのエージェントがタスクを完了するまで待機します。 |
wait_for_one | 指定されたエージェントのいずれかがタスクを完了するまで待機します。 |
保護メソッド
名前 | 説明 |
---|---|
完成です | エージェントを agent_done 状態に移行し、エージェントが完了したことを示します。 |
run | エージェントのメイン タスクを表します。 run は派生クラスでオーバーライドする必要があり、エージェントが開始された後に実行すべき処理を指定します。 |
解説
詳細については、「非同期エージェント」を参照してください。
継承階層
agent
要件
ヘッダー: agents.h
名前空間: concurrency
エージェント
エージェントを構築します。
agent();
agent(Scheduler& _PScheduler);
agent(ScheduleGroup& _PGroup);
パラメーター
_PScheduler
エージェントの実行タスクがスケジュールされている Scheduler
オブジェクト。
_PGroup
エージェントの実行タスクがスケジュールされている ScheduleGroup
オブジェクト。 使用される Scheduler
オブジェクトは、スケジュール グループによって暗黙的に指定されます。
解説
_PScheduler
または _PGroup
パラメーターを指定しない場合、ランタイムは既定のスケジューラを使用しています。
~エージェント
エージェントを破棄します。
virtual ~agent();
解説
最終状態 (agent_done
または agent_canceled
) ではないエージェントを破棄すると、エラーになります。 これを回避するには、agent
クラスを継承するクラスのデストラクターでエージェントが最終状態になるまで待機します。
cancel
エージェントを agent_created
状態または agent_runnable
状態から agent_canceled
状態に移行します。
bool cancel();
戻り値
エージェントがキャンセルされた場合は true
、それ以外の場合は false
。 エージェントが既に実行を開始しているか、既に完了している場合、エージェントをキャンセルすることはできません。
完了
エージェントを agent_done
状態に移行し、エージェントが完了したことを示します。
bool done();
戻り値
エージェントが true
状態に移行した場合は agent_done
、それ以外の場合は false
。 キャンセルされたエージェントを agent_done
状態に移行することはできません。
解説
エージェントの実行が完了したことがわかっている場合、run
メソッドの最後にこのメソッドを呼び出す必要があります。
run
エージェントのメイン タスクを表します。 run
は派生クラスでオーバーライドする必要があり、エージェントが開始された後に実行すべき処理を指定します。
virtual void run() = 0;
解説
このメソッドが呼び出される直前に、エージェントの状態が agent_started
に変更されます。 このメソッドは、制御を戻す前に適切な状態のエージェントに対して done
を呼び出す必要があり、例外をスローすることはできません。
start
エージェントを agent_created
状態から agent_runnable
状態に移行し、実行をスケジュールします。
bool start();
戻り値
エージェントが正常に開始された場合は true
、それ以外の場合は false
。 キャンセルされたエージェントを開始することはできません。
status
エージェントの状態情報の同期ソース。
agent_status status();
戻り値
エージェントの現在の状態を返します。 この返された状態は、返された直後に変わる可能性があります。
status_port
エージェントの状態情報の非同期ソース。
ISource<agent_status>* status_port();
戻り値
エージェントの現在の状態に関するメッセージを送信できるメッセージ ソースを返します。
wait
エージェントがタスクを完了するまで待機します。
static agent_status __cdecl wait(
_Inout_ agent* _PAgent,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
パラメーター
_PAgent
待機するエージェントへのポインター。
_Timeout
待機する最大時間 (ミリ秒単位)。
戻り値
待機が完了したときのエージェントの agent_status
。 これは、agent_canceled
または agent_done
になります。
解説
エージェントが agent_canceled
状態または agent_done
状態になると、エージェント タスクが完了します。
_Timeout
パラメーターの値が定数 COOPERATIVE_TIMEOUT_INFINITE
以外の場合、エージェントがタスクを完了する前に指定された時間が経過すると、operation_timed_out 例外がスローされます。
wait_for_all
指定されたすべてのエージェントがタスクを完了するまで待機します。
static void __cdecl wait_for_all(
size_t count,
_In_reads_(count) agent** _PAgents,
_Out_writes_opt_(count) agent_status* _PStatus = NULL,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
パラメーター
count
配列 _PAgents
に存在するエージェント ポインターの数。
_PAgents
待機するエージェントへのポインターの配列。
_PStatus
エージェントの状態の配列へのポインター。 各状態値は、このメソッドから制御が戻ったときの対応するエージェントの状態を表します。
_Timeout
待機する最大時間 (ミリ秒単位)。
解説
エージェントが agent_canceled
状態または agent_done
状態になると、エージェント タスクが完了します。
_Timeout
パラメーターの値が定数 COOPERATIVE_TIMEOUT_INFINITE
以外の場合、エージェントがタスクを完了する前に指定された時間が経過すると、operation_timed_out 例外がスローされます。
wait_for_one
指定されたエージェントのいずれかがタスクを完了するまで待機します。
static void __cdecl wait_for_one(
size_t count,
_In_reads_(count) agent** _PAgents,
agent_status& _Status,
size_t& _Index,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
パラメーター
count
配列 _PAgents
に存在するエージェント ポインターの数。
_PAgents
待機するエージェントへのポインターの配列。
_Status
エージェントの状態が配置される変数への参照。
_Index
エージェントのインデックスが配置される変数への参照。
_Timeout
待機する最大時間 (ミリ秒単位)。
解説
エージェントが agent_canceled
状態または agent_done
状態になると、エージェント タスクが完了します。
_Timeout
パラメーターの値が定数 COOPERATIVE_TIMEOUT_INFINITE
以外の場合、エージェントがタスクを完了する前に指定された時間が経過すると、operation_timed_out 例外がスローされます。