unbounded_buffer 类

unbounded_buffer 消息块是多目标、多源、有序的 propagator_block,能够存储不限数量的消息。

语法

template<
   class             _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget<            _Type>>, multi_link_registry<ISource<            _Type>>>;

参数

_Type
缓冲区存储和传播的消息的有效负载类型。

成员

公共构造函数

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

公共方法

名称 描述
dequeue unbounded_buffer 消息块中移除一个项。
enqueue unbounded_buffer 消息块添加一个项。

受保护方法

名称 描述
accept_message 接受此 unbounded_buffer 消息块提供的消息,将所有权转让给调用方。
consume_message 使用此 unbounded_buffer 消息块之前提供且由目标保留的消息,并将所有权转让给调用方。
link_target_notification 通知新目标已链接到 unbounded_buffer 消息块的回调。
process_input_messages message_PMessage 置于此 unbounded_buffer 消息块中,并尝试将其提供给所有链接的目标。
propagate_message 将消息从 ISource 块异步传递到 unbounded_buffer 消息块。 它在被源块调用时由 propagate 方法调用。
propagate_output_messages message_PMessage 置于此 unbounded_buffer 消息块中,并尝试将其提供给所有链接的目标。 (重写 source_block::propagate_output_messages。)
release_message 释放先前的消息预留。 (替代 source_block::release_message。)
reserve_message 保留此 unbounded_buffer 消息块之前提供的消息。 (替代 source_block::reserve_message。)
resume_propagation 在释放预留后恢复传播。 (重写 source_block::resume_propagation。)
send_message 将消息从 ISource 块同步传递到 unbounded_buffer 消息块。 它在被源块调用时由 send 方法调用。
supports_anonymous_source 重写 supports_anonymous_source 方法,以指示该块可以接受由未链接的源为其提供的消息。 (替代 ITarget::supports_anonymous_source。)

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

继承层次结构

ISource

ITarget

source_block

propagator_block

unbounded_buffer

要求

标头: agents.h

命名空间: 并发

accept_message

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

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

参数

_MsgId
提供的 message 对象的 runtime_object_identity

返回值

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

consume_message

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

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

参数

_MsgId
正在使用的 message 对象的 runtime_object_identity

返回值

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

备注

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

dequeue

unbounded_buffer 消息块中移除一个项。

_Type dequeue();

返回值

unbounded_buffer 中删除的消息的有效负载。

enqueue

unbounded_buffer 消息块添加一个项。

bool enqueue(
   _Type const&                 _Item
);

参数

_Item
要添加的项。

返回值

如果已接受项,则为 true,否则为 false

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

virtual void link_target_notification(
   _Inout_ ITarget<_Type> *                 _PTarget
);

参数

_PTarget
指向新链接的目标的指针。

propagate_message

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

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

参数

_PMessage
指向 message 对象的指针。

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

返回值

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

propagate_output_messages

message_PMessage 置于此 unbounded_buffer 消息块中,并尝试将其提供给所有链接的目标。

virtual void propagate_output_messages();

备注

如果 unbounded_buffer 中已有另一条消息在此消息之前,则在接受或使用任何先前消息之前,不会传播到链接目标。 第一个成功 acceptconsume 消息的链接目标获得所有权,然后没有其他目标可以获得消息。

process_input_messages

message_PMessage 置于此 unbounded_buffer 消息块中,并尝试将其提供给所有链接的目标。

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

参数

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

release_message

释放先前的消息预留。

virtual void release_message(
   runtime_object_identity                 _MsgId
);

参数

_MsgId
正在释放的 message 对象的 runtime_object_identity

reserve_message

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

virtual bool reserve_message(
   runtime_object_identity                 _MsgId
);

参数

_MsgId
正在保留的 message 对象的 runtime_object_identity

返回值

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

备注

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

resume_propagation

在释放预留后恢复传播。

virtual void resume_propagation();

send_message

将消息从 ISource 块同步传递到 unbounded_buffer 消息块。 它在被源块调用时由 send 方法调用。

virtual message_status send_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_Type> *                 _PSource
);

参数

_PMessage
指向 message 对象的指针。

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

返回值

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

supports_anonymous_source

重写 supports_anonymous_source 方法,以指示该块可以接受由未链接的源为其提供的消息。

virtual bool supports_anonymous_source();

返回值

true,因为该块不推迟提供的消息。

unbounded_buffer

构造 unbounded_buffer 消息块。

unbounded_buffer();

unbounded_buffer(
   filter_method const&                 _Filter
);

unbounded_buffer(
   Scheduler&                 _PScheduler
);

unbounded_buffer(
   Scheduler&                 _PScheduler,
   filter_method const&                 _Filter
);

unbounded_buffer(
   ScheduleGroup&                 _PScheduleGroup
);

unbounded_buffer(
   ScheduleGroup&                 _PScheduleGroup,
   filter_method const&                 _Filter
);

参数

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

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

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

备注

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

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

~unbounded_buffer

销毁 unbounded_buffer 消息块。

~unbounded_buffer();

另请参阅

并发命名空间
overwrite_buffer 类
single_assignment 类