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>>>;

參數

_類型
緩衝區所儲存和傳播之訊息的承載類型。

成員

公用建構函式

名稱 描述
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::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 .)

如需詳細資訊,請參閱 非同步消息塊

繼承階層架構

ISource

ITarget

source_block

propagator_block

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_identitymessage 所取用物件的 。

傳回值

呼叫端現在擁有其擁有權的物件指標 message

備註

類似于 accept ,但前面一律會呼叫 reserve

清除佇列

unbounded_buffer 傳訊區塊中移除專案。

_Type dequeue();

傳回值

unbounded_buffer 移除之訊息的承載。

enqueue

將專案加入至 unbounded_buffer 傳訊區塊。

bool enqueue(
   _Type const&                 _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
runtime_object_identity要釋放之 message 物件的 。

reserve_message

保留此 unbounded_buffer 傳訊區塊先前提供的訊息。

virtual bool reserve_message(
   runtime_object_identity                 _MsgId
);

參數

_MsgId
runtime_object_identity要保留之 message 物件的 。

傳回值

true 如果已成功保留訊息,則為 , false 否則為 。

備註

呼叫 之後 reserve ,如果傳回 trueconsume 則必須呼叫 或 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
);

參數

_濾波器
篩選函式,決定是否應接受提供的訊息。

_PScheduler
Scheduler 物件,在其內會排定 unbounded_buffer 傳訊區塊的傳播工作。

_PScheduleGroup
ScheduleGroup 物件,在其內會排定 unbounded_buffer 傳訊區塊的傳播工作。 所使用的 Scheduler 物件由排程群組所隱含。

備註

如果您未指定 _PScheduler_PScheduleGroup 參數,執行階段會使用預設排程器。

此類型 filter_method 是具有簽章 bool (_Type const &) 的函式,由此 unbounded_buffer 傳訊區塊叫用,以判斷它是否應該接受提供的訊息。

~unbounded_buffer

unbounded_buffer終結傳訊區塊。

~unbounded_buffer();

另請參閱

concurrency 命名空間
overwrite_buffer 類別
single_assignment 類別