multitype_join 类
multitype_join
消息块是多源、单目标的消息块,可以合并来自其每个源的不同类型的消息并向其目标提供合并的消息的元组。
语法
template<
typename T,
join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;
参数
T
块联接和传播的消息的 tuple
有效负载类型。
_Jtype
这是 join
块类型,可以是 greedy
或 non_greedy
成员
公共 Typedef
名称 | 描述 |
---|---|
type |
T 的类型别名。 |
公共构造函数
名称 | 描述 |
---|---|
multitype_join | 已重载。 构造 multitype_join 消息块。 |
~multitype_join 析构函数 | 销毁 multitype_join 消息块。 |
公共方法
名称 | 描述 |
---|---|
accept | 接受此 multitype_join 块提供的消息,将所有权转移给调用方。 |
acquire_ref | 获取此 multitype_join 消息块的引用计数,以防止删除。 |
使用 | 使用 multitype_join 消息块之前提供且由目标成功保留的消息,并将所有权转移给调用方。 |
link_target | 将目标块链接到此 multitype_join 消息块。 |
release | 释放之前成功保留的消息。 |
release_ref | 释放此 multiple_join 消息块的引用计数。 |
reserve | 保留此 multitype_join 消息块之前提供的消息。 |
unlink_target | 取消此 multitype_join 消息块与目标块的链接。 |
unlink_targets | 取消此 multitype_join 消息块与所有目标的链接。 (重写 ISource::unlink_targets。) |
备注
有关详细信息,请参阅异步消息块。
继承层次结构
multitype_join
要求
标头: agents.h
命名空间: 并发
接受
接受此 multitype_join
块提供的消息,将所有权转移给调用方。
virtual message<_Destination_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_MsgId
提供的 message
对象的 runtime_object_identity
。
_PTarget
指向正在调用 accept
方法的目标块的指针。
返回值
指向调用方现在对其拥有所有权的消息的指针。
acquire_ref
获取此 multitype_join
消息块的引用计数,以防止删除。
virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_PTarget
指向正在调用此方法的目标块的指针。
注解
此方法由 ITarget
对象调用,该对象在使用 link_target
方法期间链接到此源。
使用
使用 multitype_join
消息块之前提供且由目标成功保留的消息,并将所有权转移给调用方。
virtual message<_Destination_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_MsgId
保留的 message
对象的 runtime_object_identity
。
_PTarget
指向正在调用 consume
方法的目标块的指针。
返回值
指向调用方现在对其拥有所有权的 message
对象的指针。
备注
consume
方法类似于 accept
,但必须始终在对 reserve
进行调用(返回 true
)之前使用。
link_target
将目标块链接到此 multitype_join
消息块。
virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_PTarget
指向要链接到此 multitype_join
消息块的 ITarget
块的指针。
multitype_join
构造 multitype_join
消息块。
explicit multitype_join(
T _Tuple);
multitype_join(
Scheduler& _PScheduler,
T _Tuple);
multitype_join(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
multitype_join(
multitype_join&& _Join);
参数
_Tuple
此 tuple
消息块的源的 multitype_join
。
_PScheduler
在其中计划了 Scheduler
消息块的传播任务的 multitype_join
对象。
_PScheduleGroup
在其中计划了 ScheduleGroup
消息块的传播任务的 multitype_join
对象。 所用 Scheduler
对象由该计划组提示。
_Join
要从中进行复制的 multitype_join
消息块。 请注意原始对象是孤立的,使之成为一个移动构造函数。
备注
如果未指定 _PScheduler
或 _PScheduleGroup
函数,运行时将使用默认的计划程序。
在锁定状态下不执行移动构造,这意味着应由用户确保在移动期间没有轻量任务处于飞行状态。 否则可能会发生大量争用,从而导致异常或不一致的状态。
~multitype_join
销毁 multitype_join
消息块。
~multitype_join();
发布
释放之前成功保留的消息。
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_MsgId
正在释放的 message
对象的 runtime_object_identity
。
_PTarget
指向正在调用 release
方法的目标块的指针。
release_ref
释放此 multiple_join
消息块的引用计数。
virtual void release_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_PTarget
指向正在调用此方法的目标块的指针。
备注
此方法由 ITarget
对象调用,正在取消该对象与此源的链接。 源块可以释放为目标块保留的任何资源。
reserve
保留此 multitype_join
消息块之前提供的消息。
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_MsgId
正在保留的 message
对象的 runtime_object_identity
。
_PTarget
指向正在调用 reserve
方法的目标块的指针。
返回值
如果已成功保留该消息,则为 true
;否则,为 false
。 预留可能因为众多原因失败,包括:消息已预留或已由另一目标接受,源可能拒绝预留等。
注解
调用 reserve
后,如果成功,则必须调用 consume
或 release
,以便获取或放弃消息所有权。
unlink_target
取消此 multitype_join
消息块与目标块的链接。
virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);
参数
_PTarget
指向要取消与此 multitype_join
消息块的链接的 ITarget
块的指针。
unlink_targets
取消此 multitype_join
消息块与所有目标的链接。
virtual void unlink_targets();
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈