この記事の内容
すべての独立エージェントの基底クラスとして使用されるクラスです。 他のエージェントに状態が表示されないようにしたり、メッセージ渡しでやり取りしたりする目的で使用されます。
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
クラスを継承するクラスのデストラクターでエージェントが最終状態になるまで待機します。
エージェントを agent_created
状態または agent_runnable
状態から agent_canceled
状態に移行します。
bool cancel();
エージェントがキャンセルされた場合は true
、それ以外の場合は false
。 エージェントが既に実行を開始しているか、既に完了している場合、エージェントをキャンセルすることはできません。
エージェントを agent_done
状態に移行し、エージェントが完了したことを示します。
bool done();
エージェントが true
状態に移行した場合は agent_done
、それ以外の場合は false
。 キャンセルされたエージェントを agent_done
状態に移行することはできません。
エージェントの実行が完了したことがわかっている場合、run
メソッドの最後にこのメソッドを呼び出す必要があります。
エージェントのメイン タスクを表します。 run
は派生クラスでオーバーライドする必要があり、エージェントが開始された後に実行すべき処理を指定します。
virtual void run() = 0;
このメソッドが呼び出される直前に、エージェントの状態が agent_started
に変更されます。 このメソッドは、制御を戻す前に適切な状態のエージェントに対して done
を呼び出す必要があり、例外をスローすることはできません。
エージェントを agent_created
状態から agent_runnable
状態に移行し、実行をスケジュールします。
bool start();
エージェントが正常に開始された場合は true
、それ以外の場合は false
。 キャンセルされたエージェントを開始することはできません。
エージェントの状態情報の同期ソース。
agent_status status();
エージェントの現在の状態を返します。 この返された状態は、返された直後に変わる可能性があります。
エージェントの状態情報の非同期ソース。
ISource<agent_status>* status_port();
エージェントの現在の状態に関するメッセージを送信できるメッセージ ソースを返します。
エージェントがタスクを完了するまで待機します。
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 例外がスローされます。
指定されたすべてのエージェントがタスクを完了するまで待機します。
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 例外がスローされます。
指定されたエージェントのいずれかがタスクを完了するまで待機します。
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 例外がスローされます。