agent 类

旨在用作所有独立代理的基类的类。 用于对其他代理隐藏状态并通过消息传递进行交互。

语法

class agent;

成员

公共构造函数

名称 描述
agent 已重载。 构造一个代理。
~agent 析构函数 销毁代理。

公共方法

名称 说明
cancel 将代理从 agent_createdagent_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_doneagent_canceled)是错误的。 通过等待代理达到从 agent 类继承的类的析构函数中的终端状态,可以避免这种情况。

cancel

将代理从 agent_createdagent_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_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);

参数

count
数组 _PAgents 中存在的代理指针数。

_PAgents
指向要等待的代理的指针数组。

_PStatus
指向代理状态数组的指针。 每个状态值表示该方法返回时对应代理的状态。

_Timeout
等待的最大时间(以毫秒为单位)。

注解

代理进入 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);

参数

count
数组 _PAgents 中存在的代理指针数。

_PAgents
指向要等待的代理的指针数组。

_Status
对将放置代理状态的变量的引用。

_Index
对将放置代理索引的变量的引用。

_Timeout
等待的最大时间(以毫秒为单位)。

注解

代理进入 agent_canceledagent_done 状态时,代理任务完成。

如果参数 _Timeout 的值不是常量 COOPERATIVE_TIMEOUT_INFINITE,那么如果在代理完成其任务之前指定的时间到期,则会引发异常 operation_timed_out

另请参阅

并发命名空间