propagator_block 类
propagator_block
类是同时为源和目标的消息块的抽象基类。 它合并了 source_block
和 target_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_block 的 source_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
类中的大部分功能都在此处复制。
继承层次结构
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
用于计划任务的计划组。
link_source
将指定的源块链接到此 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
筛选器方法。
remove_network_links
从此 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
,除非被派生类重写。
unlink_source
取消指定源块与该 propagator_block
对象的链接。
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
参数
_PSource
指向要取消链接的 ISource
块的指针。
unlink_sources
取消所有源块与该 propagator_block
对象的链接。
virtual void unlink_sources();