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 块类型,可以是 greedynon_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。)

备注

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

继承层次结构

ISource

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)之前使用。

将目标块链接到此 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 后,如果成功,则必须调用 consumerelease,以便获取或放弃消息所有权。

取消此 multitype_join 消息块与目标块的链接。

virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);

参数

_PTarget
指向要取消与此 multitype_join 消息块的链接的 ITarget 块的指针。

取消此 multitype_join 消息块与所有目标的链接。

virtual void unlink_targets();

另请参阅

并发命名空间
choice 类
join 类