agent 類別

適合做為所有獨立代理程式之基底類別的類別。 它用來對其他代理程式隱藏狀態,並使用訊息傳遞互動。

語法

class agent;

成員

公用建構函式

名稱 描述
代理 已多載。 建構代理程式。
~agent 解構函式 終結代理程式。

公用方法

名稱 描述
cancel 將代理程式從 agent_createdagent_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_createdagent_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 傳回之前叫用具有適當狀態的代理程式,而且可能不會擲回任何例外狀況。

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
要等候之代理程式的指標。

_超時
等候的時間上限,以毫秒為單位。

傳回值

agent_status等候完成時代理程式的 。 這可以是 agent_canceledagent_done

備註

當代理程式進入 agent_canceledagent_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);

參數

計數
陣列 _PAgents 中存在的代理程式指標數目。

_PAgents
要等候之代理程式的指標陣列。

_PStatus
代理程式狀態陣列的指標。 當方法傳回時,每個狀態值都會代表對應代理程式的狀態。

_超時
等候的時間上限,以毫秒為單位。

備註

當代理程式進入 agent_canceledagent_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);

參數

計數
陣列 _PAgents 中存在的代理程式指標數目。

_PAgents
要等候之代理程式的指標陣列。

_地位
將放置代理程式狀態之變數的參考。

_指數
將放置代理程式索引之變數的參考。

_超時
等候的時間上限,以毫秒為單位。

備註

當代理程式進入 agent_canceledagent_done 狀態時,就會完成代理程式工作。

如果參數 _Timeout 的值不是常數 COOPERATIVE_TIMEOUT_INFINITE ,則如果代理程式完成其工作之前指定的時間量到期,則會擲回例外 狀況operation_timed_out

另請參閱

concurrency 命名空間