overwrite_buffer 類別
overwrite_buffer
傳訊區塊是多目標、多來源的排序 propagator_block
,一次能夠存放一個訊息。 新訊息會覆寫先前保留的訊息。
語法
template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
參數
T
緩衝區所儲存和傳播之訊息的承載類型。
成員
公用建構函式
名稱 | 描述 |
---|---|
overwrite_buffer | 已多載。 overwrite_buffer 建構傳訊區塊。 |
~overwrite_buffer解構函式 | overwrite_buffer 終結傳訊區塊。 |
公用方法
名稱 | 描述 |
---|---|
has_value | 檢查此 overwrite_buffer 傳訊區塊是否有值。 |
value | 取得目前儲存在訊息區塊中之訊息承載的 overwrite_buffer 參考。 |
受保護的方法
名稱 | 描述 |
---|---|
accept_message | 接受這個 overwrite_buffer 傳訊區塊所提供的訊息,並將訊息的複本傳回給呼叫端。 |
consume_message | 取用訊息區塊先前提供的 overwrite_buffer 訊息,並由目標保留,並將訊息的復本傳回給呼叫端。 |
link_target_notification | 回呼,通知新目標已連結至此 overwrite_buffer 傳訊區塊。 |
propagate_message | 以異步方式將訊息從 ISource 區塊傳遞至這個 overwrite_buffer 傳訊區塊。 propagate 當來源區塊呼叫時,方法會叫用它。 |
propagate_to_any_targets | message _PMessage 將 放在此overwrite_buffer 傳訊區塊中,並將它提供給所有鏈接的目標。 |
release_message | 釋放先前的訊息保留。 (覆寫 source_block::release_message. |
reserve_message | 保留此 overwrite_buffer 傳訊區塊先前提供的訊息。 (覆寫 source_block::reserve_message. |
resume_propagation | 在發行保留之後繼續傳播。 (覆寫 source_block::resume_propagation. |
send_message | 以同步方式將訊息從 ISource 區塊傳遞至此 overwrite_buffer 傳訊區塊。 send 當來源區塊呼叫時,方法會叫用它。 |
supports_anonymous_source | 覆寫 supports_anonymous_source 方法,指出這個區塊可以接受未連結的來源提供給它的訊息。 (覆寫 ITarget::supports_anonymous_source.) |
備註
傳 overwrite_buffer
訊區塊會將其儲存訊息的復本傳播至其每個目標。
如需詳細資訊,請參閱 異步消息塊。
繼承階層架構
overwrite_buffer
需求
標頭: agents.h
命名空間: concurrency
accept_message
接受這個 overwrite_buffer
傳訊區塊所提供的訊息,並將訊息的複本傳回給呼叫端。
virtual message<T>* accept_message(runtime_object_identity _MsgId);
參數
_MsgId
runtime_object_identity
提供物件message
的 。
傳回值
呼叫端現在擁有其擁有權的物件指標 message
。
備註
傳訊區塊會將 overwrite_buffer
訊息的復本傳回至其目標,而不是傳輸目前保留訊息的擁有權。
consume_message
取用訊息區塊先前提供的 overwrite_buffer
訊息,並由目標保留,並將訊息的復本傳回給呼叫端。
virtual message<T>* consume_message(runtime_object_identity _MsgId);
參數
_MsgId
runtime_object_identity
message
選擇物件的 。
傳回值
呼叫端現在擁有其擁有權的物件指標 message
。
備註
類似於 accept
,但前面一律會呼叫 reserve
。
has_value
檢查此 overwrite_buffer
傳訊區塊是否有值。
bool has_value() const;
傳回值
true
如果區塊已收到值,則為 , false
否則為 。
link_target_notification
回呼,通知新目標已連結至此 overwrite_buffer
傳訊區塊。
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
參數
_PTarget
新鏈接目標的指標。
~overwrite_buffer
overwrite_buffer
終結傳訊區塊。
~overwrite_buffer();
overwrite_buffer
overwrite_buffer
建構傳訊區塊。
overwrite_buffer();
overwrite_buffer(
filter_method const& _Filter);
overwrite_buffer(
Scheduler& _PScheduler);
overwrite_buffer(
Scheduler& _PScheduler,
filter_method const& _Filter);
overwrite_buffer(
ScheduleGroup& _PScheduleGroup);
overwrite_buffer(
ScheduleGroup& _PScheduleGroup,
filter_method const& _Filter);
參數
_濾波器
篩選函式,決定是否應接受提供的訊息。
_PScheduler
Scheduler
物件,在其內會排定 overwrite_buffer
傳訊區塊的傳播工作。
_PScheduleGroup
ScheduleGroup
物件,在其內會排定 overwrite_buffer
傳訊區塊的傳播工作。 所使用的 Scheduler
物件由排程群組所隱含。
備註
如果您未指定 _PScheduler
或 _PScheduleGroup
參數,執行階段會使用預設排程器。
此類型 filter_method
是具有簽章 bool (T const &)
的函式,由此 overwrite_buffer
傳訊區塊叫用,以判斷它是否應該接受提供的訊息。
propagate_message
以異步方式將訊息從 ISource
區塊傳遞至這個 overwrite_buffer
傳訊區塊。 propagate
當來源區塊呼叫時,方法會叫用它。
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
參數
_PMessage
message
物件的指標。
_PSource
提供訊息的來源區塊指標。
傳回值
propagate_to_any_targets
message _PMessage
將 放在此overwrite_buffer
傳訊區塊中,並將它提供給所有鏈接的目標。
virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);
參數
_PMessage
這個 已取得擁有權之 物件的overwrite_buffer
指標message
。
備註
這個方法會以新接受的訊息覆寫 中的 overwrite_buffer
目前訊息 _PMessage
。
send_message
以同步方式將訊息從 ISource
區塊傳遞至此 overwrite_buffer
傳訊區塊。 send
當來源區塊呼叫時,方法會叫用它。
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
參數
_PMessage
message
物件的指標。
_PSource
提供訊息的來源區塊指標。
傳回值
supports_anonymous_source
覆寫 supports_anonymous_source
方法,指出這個區塊可以接受未連結的來源提供給它的訊息。
virtual bool supports_anonymous_source();
傳回值
true
因為區塊不會延後提供的訊息。
release_message
釋放先前的訊息保留。
virtual void release_message(runtime_object_identity _MsgId);
參數
_MsgId
runtime_object_identity
要釋放之message
物件的 。
reserve_message
保留此 overwrite_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();
value
取得目前儲存在訊息區塊中之訊息承載的 overwrite_buffer
參考。
T value();
傳回值
目前儲存訊息的承載。
備註
儲存在中的 overwrite_buffer
值可能會在此方法傳回之後立即變更。 如果目前沒有任何訊息儲存在 中 overwrite_buffer
,這個方法會等到訊息送達為止。