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 等待所有异步传播完成。

继承层次结构

ITarget

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
用于计划任务的计划组。

将指定的源块链接到此 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();

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

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

参数

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

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

virtual void unlink_sources();

wait_for_async_sends

等待所有异步传播完成。

void wait_for_async_sends();

注解

消息块析构函数使用此方法来确保所有异步操作在销毁块之前都有时间完成。

另请参阅

并发命名空间
ITarget 类