分享方式:


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 訊區塊會將其儲存訊息的複本傳播至其每個目標。

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

繼承階層架構

ISource

ITarget

source_block

propagator_block

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

傳回值

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

備註

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

has_value

檢查此 overwrite_buffer 傳訊區塊是否有值。

bool has_value() const;

傳回值

true 如果區塊已收到值,則為 , false 否則為 。

回呼,通知新目標已連結至此 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
提供訊息的來源區塊指標。

傳回值

message_status 指出目標決定對訊息執行的動作。

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
提供訊息的來源區塊指標。

傳回值

message_status 指出目標決定對訊息執行的動作。

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 ,如果傳回 trueconsume 則必須呼叫 或 release 以取得或釋放訊息的擁有權。

resume_propagation

在發行保留之後繼續傳播。

virtual void resume_propagation();

value

取得目前儲存在訊息區塊中之訊息承載的 overwrite_buffer 參考。

T value();

傳回值

目前儲存訊息的承載。

備註

儲存在 中的 overwrite_buffer 值可能會在此方法傳回之後立即變更。 如果目前沒有任何訊息儲存在 中 overwrite_buffer ,這個方法會等到訊息送達為止。

另請參閱

concurrency 命名空間
unbounded_buffer 類別
single_assignment 類別