propagator_block 类

propagator_block 类是同时为源和目标的消息块的抽象基类。 它合并了 source_blocktarget_block 类的功能。

语法

template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class propagator_block : public source_block<_TargetLinkRegistry,
    _MessageProcessorType>,
public ITarget<typename _SourceLinkRegistry::type::source_type>;

参数

_TargetLinkRegistry
用于保存目标链接的链接注册表。

_SourceLinkRegistry
用于保存源链接的链接注册表。

_MessageProcessorType
用于消息处理的处理器类型。

成员

公共 Typedef

名称 描述
source_iterator propagator_blocksource_link_manager 的迭代器类型。

公共构造函数

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

公共方法

名称 描述
propagate 以异步方式将消息从源块传递到此目标块。
发送 同步向此块发起消息。 由 ISource 块调用。 此函数完成时,消息将已传播到块中。

受保护方法

名称 描述
decline_incoming_messages 指示块应拒绝新消息。
initialize_source_and_target 初始化基对象。 具体来说,需要初始化 message_processor 对象。
link_source 将指定的源块链接到此 propagator_block 对象。
process_input_messages 处理输入消息。 这只适用于从 source_block 派生的传播器块(重写 source_block::process_input_messages。)
propagate_message 在派生类中重写时,此方法将消息从 ISource 块异步传递到此 propagator_block 对象。 它在被源块调用时由 propagate 方法调用。
register_filter 注册一个筛选器方法,将对每条收到的消息调用此方法。
remove_network_links 从此 propagator_block 对象中删除所有源和目标网络链接。
send_message 在派生类中重写时,此方法将消息从 ISource 块同步传递到此 propagator_block 对象。 它在被源块调用时由 send 方法调用。
unlink_source 取消指定源块与该 propagator_block 对象的链接。
unlink_sources 取消所有源块与该 propagator_block 对象的链接。 (重写 ITarget::unlink_sources。)

注解

为避免多重继承,propagator_block 类继承自 source_block 类和 ITarget 抽象类。 target_block 类中的大部分功能都在此处复制。

继承层次结构

ISource

ITarget

source_block

propagator_block

要求

标头: agents.h

命名空间: 并发

decline_incoming_messages

指示块应拒绝新消息。

void decline_incoming_messages();

注解

析构函数调用此方法,以确保在销毁过程中拒绝新消息。

initialize_source_and_target

初始化基对象。 具体来说,需要初始化 message_processor 对象。

void initialize_source_and_target(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

参数

_PScheduler
用于计划任务的计划程序。

_PScheduleGroup
用于计划任务的计划组。

将指定的源块链接到此 propagator_block 对象。

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

参数

_PSource
指向要链接的 ISource 块的指针。

process_input_messages

处理输入消息。 这只适用于从源块派生的传播器块。

virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);

参数

_PMessage
指向要处理的消息的指针。

propagate

以异步方式将消息从源块传递到此目标块。

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

参数

_PMessage
指向 message 对象的指针。

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

返回值

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

备注

propagate 方法由链接的源块在目标块上调用。 如果某个异步任务尚未排队或执行,它会将该任务排入队列以处理消息。

如果 _PMessage_PSource参数为 NULL,则引发 invalid_argument 异常。

propagate_message

在派生类中重写时,此方法将消息从 ISource 块异步传递到此 propagator_block 对象。 它在被源块调用时由 propagate 方法调用。

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

参数

_PMessage
指向 message 对象的指针。

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

返回值

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

propagator_block

构造 propagator_block 对象。

propagator_block();

~propagator_block

销毁 propagator_block 对象。

virtual ~propagator_block();

register_filter

注册一个筛选器方法,将对每条收到的消息调用此方法。

void register_filter(filter_method const& _Filter);

参数

_Filter
筛选器方法。

从此 propagator_block 对象中删除所有源和目标网络链接。

void remove_network_links();

发送

同步向此块发起消息。 由 ISource 块调用。 此函数完成时,消息将已传播到块中。

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

参数

_PMessage
指向 message 对象的指针。

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

返回值

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

备注

如果 _PMessage_PSource参数为 NULL,则引发 invalid_argument 异常。

send_message

在派生类中重写时,此方法将消息从 ISource 块同步传递到此 propagator_block 对象。 它在被源块调用时由 send 方法调用。

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

返回值

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

注解

默认情况下,此块返回 declined,除非被派生类重写。

取消指定源块与该 propagator_block 对象的链接。

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

参数

_PSource
指向要取消链接的 ISource 块的指针。

取消所有源块与该 propagator_block 对象的链接。

virtual void unlink_sources();

另请参阅

并发命名空间
source_block 类
ITarget 类