agent 類別
適合做為所有獨立代理程式之基底類別的類別。 它用來對其他代理程式隱藏狀態,並使用訊息傳遞互動。
語法
class 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
要等候之代理程式的指標。
_超時
等候的時間上限,以毫秒為單位。
傳回值
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);
參數
計數
陣列 _PAgents
中存在的代理程式指標數目。
_PAgents
要等候之代理程式的指標數位。
_PStatus
代理程式狀態陣列的指標。 當方法傳回時,每個狀態值都會代表對應代理程序的狀態。
_超時
等候的時間上限,以毫秒為單位。
備註
當代理程式進入 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);
參數
計數
陣列 _PAgents
中存在的代理程式指標數目。
_PAgents
要等候之代理程式的指標數位。
_地位
將放置代理程序狀態之變數的參考。
_指數
將放置代理程式索引之變數的參考。
_超時
等候的時間上限,以毫秒為單位。
備註
當代理程式進入 agent_canceled
或 agent_done
狀態時,就會完成代理程式工作。
如果參數 _Timeout
的值不是常數 COOPERATIVE_TIMEOUT_INFINITE
,則如果代理程式完成其工作之前指定的時間量到期,則會擲回例外 狀況operation_timed_out 。