agent 类
旨在用作所有独立代理的基类的类。 用于对其他代理隐藏状态并通过消息传递进行交互。
语法
class agent;
成员
公共构造函数
名称 | 描述 |
---|---|
agent | 已重载。 构造一个代理。 |
~agent 析构函数 | 销毁代理。 |
公共方法
名称 | 说明 |
---|---|
cancel | 将代理从 agent_created 或 agent_runnable 状态移至 agent_canceled 状态。 |
start | 将代理从 agent_created 状态移至 agent_runnable 状态,并计划执行。 |
status | 来自代理的状态信息的同步源。 |
status_port | 来自代理的状态信息的异步源。 |
wait | 等待代理完成其任务。 |
wait_for_all | 等待所有指定代理完成其任务。 |
wait_for_one | 等待任一指定代理完成其任务。 |
受保护方法
名称 | 描述 |
---|---|
done | 将代理移至 agent_done 状态,指示代理已完成。 |
run | 表示代理的主要任务。 run 应在派生类中重写,并指定代理在启动后应执行的操作。 |
备注
有关详细信息,请参阅异步代理。
继承层次结构
agent
要求
标头: agents.h
命名空间: 并发
agent
构造一个代理。
agent();
agent(Scheduler& _PScheduler);
agent(ScheduleGroup& _PGroup);
参数
_PScheduler
在其中计划代理执行任务的 Scheduler
对象。
_PGroup
在其中计划代理执行任务的 ScheduleGroup
对象。 所用 Scheduler
对象由该计划组提示。
备注
如果未指定 _PScheduler
或 _PGroup
函数,运行时将使用默认的计划程序。
~agent
销毁代理。
virtual ~agent();
备注
销毁未处于终端状态的代理(agent_done
或 agent_canceled
)是错误的。 通过等待代理达到从 agent
类继承的类的析构函数中的终端状态,可以避免这种情况。
cancel
将代理从 agent_created
或 agent_runnable
状态移至 agent_canceled
状态。
bool cancel();
返回值
如果代理已取消,则为 true
;否则为 false
。 如果代理已经开始运行或已完成,则无法取消代理。
完成
将代理移至 agent_done
状态,指示代理已完成。
bool done();
返回值
如果代理移至 agent_done
状态,则为 true
,否则为 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。