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();

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 例外がスローされます。

関連項目

コンカレンシー名前空間