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();
link_target
在派生类中重写时,将目标块链接到此 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
后,如果成功,则必须调用 consume
或 release
,以便获取或放弃消息所有权。
unlink_target
在派生类中重写时,如果发现先前已链接目标块,则从此 ISource
块取消链接该目标块。
virtual void unlink_target(_Inout_ ITarget<T>* _PTarget) = 0;
参数
_PTarget
指向从此 ISource
块取消链接的目标块的指针。
unlink_targets
在派生类中重写时,从此 ISource
块取消链接所有目标块。
virtual void unlink_targets() = 0;