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。) |
有关详细信息,请参阅异步消息块。
继承层次结构
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
。
link_target_notification
通知新目标已链接到 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
中已有另一条消息在此消息之前,则在接受或使用任何先前消息之前,不会传播到链接目标。 第一个成功 accept
或 consume
消息的链接目标获得所有权,然后没有其他目标可以获得消息。
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
,则必须调用 consume
或 release
来获取或释放消息的所有权。
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();