ISource 类

ISource 类是所有源块的接口。 源块将消息传播到 ITarget 块。

语法

template<class T>
class ISource;

参数

T
源块生成的消息中的有效负载的数据类型。

成员

公共 Typedef

名称 描述
source_type T 的类型别名。

公共构造函数

名称 描述
~ISource 析构函数 销毁 ISource 对象。

公共方法

名称 描述
accept 在派生类中重写时,接受此 ISource 块提供的消息,将所有权转让给调用方。
acquire_ref 在派生类中重写时,获取此 ISource 块的引用计数,以防止删除。
使用 在派生类中重写时,使用此 ISource 消息块之前提供且由目标成功保留的消息,并将所有权转让给调用方。
link_target 在派生类中重写时,将目标块链接到此 ISource 块。
release 在派生类中重写时,释放以前成功的消息预留。
release_ref 在派生类中重写时,释放此 ISource 块的引用计数。
reserve 在派生类中重写时,保留此 ISource 块先前提供的消息。
unlink_target 在派生类中重写时,如果发现先前已链接目标块,则从此 ISource 块取消链接该目标块。
unlink_targets 在派生类中重写时,从此 ISource 块取消链接所有目标块。

注解

有关详细信息,请参阅异步消息块

继承层次结构

ISource

要求

标头: agents.h

命名空间: 并发

接受

在派生类中重写时,接受此 ISource 块提供的消息,将所有权转让给调用方。

virtual message<T>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

参数

_MsgId
提供的 message 对象的 runtime_object_identity

_PTarget
指向正在调用 accept 方法的目标块的指针。

返回值

指向调用方现在对其拥有所有权的消息的指针。

备注

当消息由此 ISource 块提供时,目标调用 accept 方法。 如果此源决定复制消息,则返回的消息指针可能与传递给 ITarget 块的 propagate 方法的指针不同。

acquire_ref

在派生类中重写时,获取此 ISource 块的引用计数,以防止删除。

virtual void acquire_ref(_Inout_ ITarget<T>* _PTarget) = 0;

参数

_PTarget
指向正在调用此方法的目标块的指针。

注解

此方法由 ITarget 对象调用,该对象在使用 link_target 方法期间链接到此源。

使用

在派生类中重写时,使用此 ISource 消息块之前提供且由目标成功保留的消息,并将所有权转让给调用方。

virtual message<T>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

参数

_MsgId
保留的 message 对象的 runtime_object_identity

_PTarget
指向正在调用 consume 方法的目标块的指针。

返回值

指向调用方现在对其拥有所有权的 message 对象的指针。

备注

consume 方法类似于 accept,但必须始终在对 reserve 进行调用(返回 true)之前使用。

~ISource

销毁 ISource 对象。

virtual ~ISource();

在派生类中重写时,将目标块链接到此 ISource 块。

virtual void link_target(_Inout_ ITarget<T>* _PTarget) = 0;

参数

_PTarget
指向链接到此 ISource 块的目标块的指针。

发布

在派生类中重写时,释放以前成功的消息预留。

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

参数

_MsgId
保留的 message 对象的 runtime_object_identity

_PTarget
指向正在调用 release 方法的目标块的指针。

release_ref

在派生类中重写时,释放此 ISource 块的引用计数。

virtual void release_ref(_Inout_ ITarget<T>* _PTarget) = 0;

参数

_PTarget
指向正在调用此方法的目标块的指针。

备注

此方法由 ITarget 对象调用,正在取消该对象与此源的链接。 源块可以释放为目标块保留的任何资源。

reserve

在派生类中重写时,保留此 ISource 块先前提供的消息。

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

参数

_MsgId
提供的 message 对象的 runtime_object_identity

_PTarget
指向正在调用 reserve 方法的目标块的指针。

返回值

如果已成功保留该消息,则为 true;否则,为 false。 预留可能因为众多原因失败,包括:消息已预留或已由另一目标接受,源可能拒绝预留等。

注解

调用 reserve 后,如果成功,则必须调用 consumerelease,以便获取或放弃消息所有权。

在派生类中重写时,如果发现先前已链接目标块,则从此 ISource 块取消链接该目标块。

virtual void unlink_target(_Inout_ ITarget<T>* _PTarget) = 0;

参数

_PTarget
指向从此 ISource 块取消链接的目标块的指针。

在派生类中重写时,从此 ISource 块取消链接所有目标块。

virtual void unlink_targets() = 0;

另请参阅

并发命名空间
ITarget 类