unbounded_buffer 傳訊區塊是多目標、多來源的排序 propagator_block,能夠存放無限個訊息。
語法
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
參數
_類型
緩衝區所儲存和傳播之訊息的承載類型。
成員
公用建構函式
| 名稱 | 描述 |
|---|---|
| unbounded_buffer | 已多載。 unbounded_buffer建構傳訊區塊。 |
| ~unbounded_buffer解構函式 | unbounded_buffer終結傳訊區塊。 |
公用方法
| 名稱 | 描述 |
|---|---|
| 出列 | 從 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::p ropagate_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
命名空間: concurrency
accept_message
接受此 unbounded_buffer 傳訊區塊所提供的訊息,並將擁有權轉移給呼叫端。
virtual message<_Type> * accept_message(
runtime_object_identity _MsgId
);
參數
_MsgId
runtime_object_identity提供物件message的 。
傳回值
呼叫端現在擁有其擁有權的物件指標 message 。
consume_message
取用訊息區塊先前提供的 unbounded_buffer 訊息,並由目標保留,並將擁有權轉移給呼叫端。
virtual message<_Type> * consume_message(
runtime_object_identity _MsgId
);
參數
_MsgId
runtime_object_identity message選擇物件的 。
傳回值
呼叫端現在擁有其擁有權的物件指標 message 。
備註
類似於 accept,但前面一律會呼叫 reserve。
清除佇列
從 unbounded_buffer 傳訊區塊中移除專案。
_Type dequeue();
傳回值
從 unbounded_buffer移除之訊息的承載。
enqueue
將專案加入至 unbounded_buffer 傳訊區塊。
bool enqueue(
_Type const& _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
提供訊息的來源區塊指標。
傳回值
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
runtime_object_identity要釋放之message物件的 。
reserve_message
保留此 unbounded_buffer 傳訊區塊先前提供的訊息。
virtual bool reserve_message(
runtime_object_identity _MsgId
);
參數
_MsgId
runtime_object_identity要保留的message物件的 。
傳回值
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
提供訊息的來源區塊指標。
傳回值
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
);
參數
_濾波器
篩選函式,決定是否應接受提供的訊息。
_PScheduler
Scheduler 物件,在其內會排定 unbounded_buffer 傳訊區塊的傳播工作。
_PScheduleGroup
ScheduleGroup 物件,在其內會排定 unbounded_buffer 傳訊區塊的傳播工作。 所使用的 Scheduler 物件由排程群組所隱含。
備註
如果您未指定 _PScheduler 或 _PScheduleGroup 參數,執行階段會使用預設排程器。
此類型 filter_method 是具有簽章 bool (_Type const &) 的函式,由此 unbounded_buffer 傳訊區塊叫用,以判斷它是否應該接受提供的訊息。
~unbounded_buffer
unbounded_buffer終結傳訊區塊。
~unbounded_buffer();