join 类

join 消息块是单目标、多源、有序的 propagator_block,它可以合并来自其每个源的 T 类型消息。

语法

template<class T,
    join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
    multi_link_registry<ISource<T>>>;

参数

T
块联接和传播的消息的 有效负载类型。

_Jtype
这是 join 块类型,可以是 greedynon_greedy

成员

公共构造函数

名称 描述
join 已重载。 构造 join 消息块。
~join 析构函数 销毁 join 块。

受保护方法

名称 描述
accept_message 接受此 join 消息块提供的消息,将所有权转让给调用方。
consume_message 使用此 join 消息块之前提供且由目标保留的消息,并将所有权转让给调用方。
link_target_notification 通知新目标已链接到 join 消息块的回调。
propagate_message 将消息从 ISource 块异步传递到 join 消息块。 它在被源块调用时由 propagate 方法调用。
propagate_to_any_targets 当每个源都传播了一个消息时,构造包含来自每个源的输入消息的输出消息。 将此输出消息发送到各个目标。
release_message 释放先前的消息预留。 (替代 source_block::release_message。)
reserve_message 保留此 join 消息块之前提供的消息。 (替代 source_block::reserve_message。)
resume_propagation 在释放预留后恢复传播。 (重写 source_block::resume_propagation。)

备注

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

继承层次结构

ISource

ITarget

source_block

propagator_block

join

要求

标头: agents.h

命名空间: 并发

accept_message

接受此 join 消息块提供的消息,将所有权转让给调用方。

virtual message<_OutputType>* accept_message(runtime_object_identity _MsgId);

参数

_MsgId
提供的 message 对象的 runtime_object_identity

返回值

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

consume_message

使用此 join 消息块之前提供且由目标保留的消息,并将所有权转让给调用方。

virtual message<_OutputType>* consume_message(runtime_object_identity _MsgId);

参数

_MsgId
正在使用的 message 对象的 runtime_object_identity

返回值

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

注解

类似于 accept,但始终在对 reserve 的调用之前。

join

构造 join 消息块。

join(
    size_t _NumInputs);

join(
    size_t _NumInputs,
    filter_method const& _Filter);

join(
    Scheduler& _PScheduler,
    size_t _NumInputs);

join(
    Scheduler& _PScheduler,
    size_t _NumInputs,
    filter_method const& _Filter);

join(
    ScheduleGroup& _PScheduleGroup,
    size_t _NumInputs);

join(
    ScheduleGroup& _PScheduleGroup,
    size_t _NumInputs,
    filter_method const& _Filter);

参数

_NumInputs
join 块的输入数将得到允许。

_Filter
一个筛选器函数,用于确定是否应接受提供的消息。

_PScheduler
在其中计划了 Scheduler 消息块的传播任务的 join 对象。

_PScheduleGroup
在其中计划了 ScheduleGroup 消息块的传播任务的 join 对象。 所用 Scheduler 对象由该计划组提示。

备注

如果未指定 _PScheduler_PScheduleGroup 函数,运行时将使用默认的计划程序。

类型 filter_method 是一个具有 bool (T const &) 签名的函子,由 join 消息块调用来确定它是否应接受提供的消息。

~join

销毁 join 块。

~join();

通知新目标已链接到 join 消息块的回调。

virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);

propagate_message

将消息从 ISource 块异步传递到 join 消息块。 它在被源块调用时由 propagate 方法调用。

message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

参数

_PMessage
指向 message 对象的指针。

_PSource
指向提供消息的源块的指针。

返回值

message_status 指示目标决定对消息执行的操作。

propagate_to_any_targets

当每个源都传播了一个消息时,构造包含来自每个源的输入消息的输出消息。 将此输出消息发送到各个目标。

void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);

release_message

释放先前的消息预留。

virtual void release_message(runtime_object_identity _MsgId);

参数

_MsgId
正在释放的 message 对象的 runtime_object_identity

reserve_message

保留此 join 消息块之前提供的消息。

virtual bool reserve_message(runtime_object_identity _MsgId);

参数

_MsgId
提供的 message 对象的 runtime_object_identity

返回值

如果已成功保留该消息,则为 true;否则,为 false

备注

调用 reserve 后,如果返回 true,则必须调用 consumerelease 来获取或释放消息的所有权。

resume_propagation

在释放预留后恢复传播。

virtual void resume_propagation();

另请参阅

并发命名空间
choice 类
multitype_join 类