target_block 类
target_block
类是抽象基类,它提供基本链接管理功能和针对仅限于目标的块的错误检查。
语法
template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;
参数
_SourceLinkRegistry
用于保存源链接的链接注册表。
_MessageProcessorType
用于消息处理的处理器类型。
成员
公共 Typedef
名称 | 描述 |
---|---|
source_iterator |
此 target_block 对象的 source_link_manager 的迭代器类型。 |
公共构造函数
名称 | 描述 |
---|---|
target_block | 构造 target_block 对象。 |
~target_block Destructor | 销毁 target_block 对象。 |
公共方法
名称 | 描述 |
---|---|
propagate | 以异步方式将消息从源块传递到此目标块。 |
发送 | 以同步方式将消息从源块传递到此目标块。 |
受保护方法
名称 | 描述 |
---|---|
async_send | 异步发送消息进行处理。 |
decline_incoming_messages | 指示块应拒绝新消息。 |
enable_batched_processing | 启用该块的批处理。 |
initialize_target | 初始化基对象。 具体来说,需要初始化 message_processor 对象。 |
link_source | 将指定的源块链接到此 target_block 对象。 |
process_input_messages | 处理作为输入接收的消息。 |
process_message | 在派生类中重写时,处理由该 target_block 对象接受的消息。 |
propagate_message | 在派生类中重写时,此方法将消息从 ISource 块异步传递到此 target_block 对象。 它在被源块调用时由 propagate 方法调用。 |
register_filter | 注册一个筛选器方法,将对每条收到的消息调用此方法。 |
remove_sources | 等待未完成的异步发送操作完成后取消链接所有源。 |
send_message | 在派生类中重写时,此方法将消息从 ISource 块同步传递到此 target_block 对象。 它在被源块调用时由 send 方法调用。 |
sync_send | 同步发送消息进行处理。 |
unlink_source | 取消指定源块与该 target_block 对象的链接。 |
unlink_sources | 取消所有源块与该 target_block 对象的链接。 (重写 ITarget::unlink_sources。) |
wait_for_async_sends | 等待所有异步传播完成。 |
继承层次结构
target_block
要求
标头: agents.h
命名空间: 并发
async_send
异步发送消息进行处理。
void async_send(_Inout_opt_ message<_Source_type>* _PMessage);
参数
_PMessage
指向要发送的消息的指针。
decline_incoming_messages
指示块应拒绝新消息。
void decline_incoming_messages();
注解
析构函数调用此方法,以确保在销毁过程中拒绝新消息。
enable_batched_processing
启用该块的批处理。
void enable_batched_processing();
initialize_target
初始化基对象。 具体来说,需要初始化 message_processor
对象。
void initialize_target(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
参数
_PScheduler
用于计划任务的计划程序。
_PScheduleGroup
用于计划任务的计划组。
link_source
将指定的源块链接到此 target_block
对象。
virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);
参数
_PSource
指向要链接的 ISource
块的指针。
备注
不应在 target_block
对象上直接调用此函数。 块应使用 ISource
块上的 link_target
方法连接在一起,这将在相应的目标上调用 link_source
该方法。
process_input_messages
处理作为输入接收的消息。
virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);
参数
_PMessage
指向要处理的消息的指针。
process_message
在派生类中重写时,处理由该 target_block
对象接受的消息。
virtual void process_message(message<_Source_type> *);
propagate
以异步方式将消息从源块传递到此目标块。
virtual message_status propagate(
_Inout_opt_ message<_Source_type>* _PMessage,
_Inout_opt_ ISource<_Source_type>* _PSource);
参数
_PMessage
指向 message
对象的指针。
_PSource
指向提供消息的源块的指针。
返回值
message_status 指示目标决定对消息执行的操作。
备注
如果 _PMessage
或 _PSource
参数为 NULL
,则引发 invalid_argument 异常。
propagate_message
在派生类中重写时,此方法将消息从 ISource
块异步传递到此 target_block
对象。 它在被源块调用时由 propagate
方法调用。
virtual message_status propagate_message(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource) = 0;
参数
_PMessage
指向 message
对象的指针。
_PSource
指向提供消息的源块的指针。
返回值
message_status 指示目标决定对消息执行的操作。
register_filter
注册一个筛选器方法,将对每条收到的消息调用此方法。
void register_filter(filter_method const& _Filter);
参数
_Filter
筛选器方法。
remove_sources
等待未完成的异步发送操作完成后取消链接所有源。
void remove_sources();
备注
所有目标块都应调用此例程来移除其析构函数中的源。
发送
以同步方式将消息从源块传递到此目标块。
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
方法并在网络中传播消息很危险,可能导致死锁。
返回 send
时,消息已被接受并传输到目标块,或者目标已拒绝。
send_message
在派生类中重写时,此方法将消息从 ISource
块同步传递到此 target_block
对象。 它在被源块调用时由 send
方法调用。
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
返回值
message_status 指示目标决定对消息执行的操作。
注解
默认情况下,此块返回 declined
,除非被派生类重写。
sync_send
同步发送消息进行处理。
void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);
参数
_PMessage
指向要发送的消息的指针。
target_block
构造 target_block
对象。
target_block();
~target_block
销毁 target_block
对象。
virtual ~target_block();
unlink_source
取消指定源块与该 target_block
对象的链接。
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
参数
_PSource
指向要取消链接的 ISource
块的指针。
unlink_sources
取消所有源块与该 target_block
对象的链接。
virtual void unlink_sources();
wait_for_async_sends
等待所有异步传播完成。
void wait_for_async_sends();
注解
消息块析构函数使用此方法来确保所有异步操作在销毁块之前都有时间完成。