single_assignment 類別

single_assignment 傳訊區塊是多目標、多來源的排序 propagator_block,能夠儲存寫入一次的單一 message

語法

template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

參數

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

成員

公用建構函式

名稱 描述
single_assignment 已多載。 建構 single_assignment 傳訊區塊。
~single_assignment解構函式 single_assignment終結傳訊區塊。

公用方法

名稱 描述
has_value 檢查此 single_assignment 傳訊區塊是否已使用 值初始化。
value 取得目前儲存在訊息區塊中之訊息承載的 single_assignment 參考。

受保護的方法

名稱 描述
accept_message 接受這個 single_assignment 傳訊區塊所提供的訊息,並將訊息的複本傳回給呼叫端。
consume_message 取用先前由 single_assignment 目標提供的訊息,並由目標保留,並將訊息的複本傳回給呼叫端。
link_target_notification 回呼,通知新目標已連結至此 single_assignment 傳訊區塊。
propagate_message 以非同步方式將訊息從 ISource 區塊傳遞至這個 single_assignment 傳訊區塊。 propagate當來源區塊呼叫時,方法會叫用它。
propagate_to_any_targets message _PMessage將 放在此 single_assignment 傳訊區塊中,並將它提供給所有連結的目標。
release_message 釋放先前的訊息保留。 (覆寫 source_block::release_message .
reserve_message 保留此 single_assignment 傳訊區塊先前提供的訊息。 (覆寫 source_block::reserve_message .
resume_propagation 在發行保留之後繼續傳播。 (覆寫 source_block::resume_propagation .
send_message 以同步方式將訊息從 ISource 區塊傳遞至此 single_assignment 傳訊區塊。 send當來源區塊呼叫時,方法會叫用它。

備註

single_assignment傳訊區塊會將訊息的複本傳播至每個目標。

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

繼承階層架構

ISource

ITarget

source_block

propagator_block

single_assignment

需求

標頭: agents.h

命名空間: concurrency

accept_message

接受這個 single_assignment 傳訊區塊所提供的訊息,並將訊息的複本傳回給呼叫端。

virtual message<T>* accept_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identity所提供 message 物件的 。

傳回值

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

備註

傳訊區塊會將 single_assignment 訊息的複本傳回至其目標,而不是傳輸目前保留訊息的擁有權。

consume_message

取用先前由 single_assignment 目標提供的訊息,並由目標保留,並將訊息的複本傳回給呼叫端。

virtual message<T>* consume_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identitymessage 所取用物件的 。

傳回值

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

備註

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

has_value

檢查此 single_assignment 傳訊區塊是否已使用 值初始化。

bool has_value() const;

傳回值

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

回呼,通知新目標已連結至此 single_assignment 傳訊區塊。

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

參數

_PTarget
新連結目標的指標。

propagate_message

以非同步方式將訊息從 ISource 區塊傳遞至這個 single_assignment 傳訊區塊。 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 將 放在此 single_assignment 傳訊區塊中,並將它提供給所有連結的目標。

virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);

參數

_PMessage
這個 single_assignment 傳訊區塊已取得擁有權的 指標 message

release_message

釋放先前的訊息保留。

virtual void release_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identity要釋放之 message 物件的 。

reserve_message

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

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 區塊傳遞至此 single_assignment 傳訊區塊。 send當來源區塊呼叫時,方法會叫用它。

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

參數

_PMessage
message 物件的指標。

_PSource
提供訊息的來源區塊指標。

傳回值

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

single_assignment

建構 single_assignment 傳訊區塊。

single_assignment();

single_assignment(
    filter_method const& _Filter);

single_assignment(
    Scheduler& _PScheduler);

single_assignment(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

single_assignment(
    ScheduleGroup& _PScheduleGroup);

single_assignment(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

參數

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

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

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

備註

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

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

~single_assignment

single_assignment終結傳訊區塊。

~single_assignment();

value

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

T const& value();

傳回值

預存訊息的承載。

備註

如果訊息目前未儲存在訊息區塊中 single_assignment ,這個方法會等到訊息送達為止。

另請參閱

concurrency 命名空間
overwrite_buffer 類別
unbounded_buffer 類別