propagator_block 類別

propagator_block 類別是同時為來源和目標之訊息區塊的抽象基底類別。 它結合 source_blocktarget_block 類別的功能。

語法

template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class propagator_block : public source_block<_TargetLinkRegistry,
    _MessageProcessorType>,
public ITarget<typename _SourceLinkRegistry::type::source_type>;

參數

_TargetLinkRegistry
要用來持有目標連結的連結登錄。

_SourceLinkRegistry
用來存放來源連結的連結登錄。

_MessageProcessorType
訊息處理的處理器類型。

成員

公用 Typedefs

名稱 描述
source_iterator 這個 之 的反覆運算器 source_link_manager 型別 propagator_block

公用建構函式

名稱 描述
propagator_block 建構 propagator_block 物件。
~propagator_block解構函式 終結 propagator_block 物件。

公用方法

名稱 描述
傳播 以非同步方式將訊息從來源區塊傳遞至此目標區塊。
傳送 同步起始此區塊的訊息。 區塊呼叫 ISource 。 當此函式完成時,訊息已經傳播到 區塊中。

受保護的方法

名稱 描述
decline_incoming_messages 向 區塊指出應該拒絕新訊息。
initialize_source_and_target 初始化基底物件。 具體而言, message_processor 必須初始化 物件。
link_source 將指定的來源區塊連結至這個 propagator_block 物件。
process_input_messages 處理輸入訊息。 這只適用于傳播器區塊,其衍生自 source_block (Overrides source_block::p rocess_input_messages .)
propagate_message 在衍生類別中覆寫時,這個方法會以非同步方式將訊息從 ISource 區塊傳遞至這個 propagator_block 物件。 propagate當來源區塊呼叫時,方法會叫用它。
register_filter 註冊將在每個接收的訊息上叫用的篩選方法。
remove_network_links 從這個 propagator_block 物件移除所有來源和目標網路連結。
send_message 在衍生類別中覆寫時,這個方法會同步將訊息從 ISource 區塊傳遞至這個 propagator_block 物件。 send當來源區塊呼叫時,方法會叫用它。
unlink_source 從這個 propagator_block 物件取消連結指定的來源區塊。
unlink_sources 從這個 propagator_block 物件取消連結所有來源區塊。 (覆寫 ITarget::unlink_sources .

備註

為了避免多重繼承,類別 propagator_block 會繼承自 source_block 類別和 ITarget 抽象類別。 類別中的 target_block 大部分功能會在這裡複寫。

繼承階層架構

ISource

ITarget

source_block

propagator_block

需求

標頭: agents.h

命名空間: concurrency

decline_incoming_messages

向 區塊指出應該拒絕新訊息。

void decline_incoming_messages();

備註

解構函式會呼叫這個方法,以確保在解構進行時拒絕新的訊息。

initialize_source_and_target

初始化基底物件。 具體而言, message_processor 必須初始化 物件。

void initialize_source_and_target(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

參數

_PScheduler
要用於排程工作的排程器。

_PScheduleGroup
要用於排程工作的排程群組。

將指定的來源區塊連結至這個 propagator_block 物件。

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

參數

_PSource
要連結之區塊的 ISource 指標。

process_input_messages

處理輸入訊息。 這只對衍生自 source_block 的傳播程式區塊有用

virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);

參數

_PMessage
要處理的訊息指標。

傳播

以非同步方式將訊息從來源區塊傳遞至此目標區塊。

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

參數

_PMessage
message 物件的指標。

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

傳回值

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

備註

方法 propagate 是由連結的來源區塊在目標區塊上叫用。 如果尚未排入佇列或執行訊息,它會將非同步工作排入佇列以處理訊息。

如果 _PMessage 或 參數為 NULL ,則方法會 擲回invalid_argument _PSource 例外狀況。

propagate_message

在衍生類別中覆寫時,這個方法會以非同步方式將訊息從 ISource 區塊傳遞至這個 propagator_block 物件。 propagate當來源區塊呼叫時,方法會叫用它。

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

參數

_PMessage
message 物件的指標。

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

傳回值

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

propagator_block

建構 propagator_block 物件。

propagator_block();

~propagator_block

終結 propagator_block 物件。

virtual ~propagator_block();

register_filter

註冊將在每個接收的訊息上叫用的篩選方法。

void register_filter(filter_method const& _Filter);

參數

_濾波器
篩選方法。

從這個 propagator_block 物件移除所有來源和目標網路連結。

void remove_network_links();

傳送

同步起始此區塊的訊息。 區塊呼叫 ISource 。 當此函式完成時,訊息已經傳播到 區塊中。

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

參數

_PMessage
message 物件的指標。

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

傳回值

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

備註

如果 _PMessage 或 參數為 NULL ,這個方法會 擲回invalid_argument _PSource 例外狀況。

send_message

在衍生類別中覆寫時,這個方法會同步將訊息從 ISource 區塊傳遞至這個 propagator_block 物件。 send當來源區塊呼叫時,方法會叫用它。

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

傳回值

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

備註

根據預設,除非由衍生類別覆寫,否則此區塊會 declined 傳回 。

從這個 propagator_block 物件取消連結指定的來源區塊。

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

參數

_PSource
要取消連結之區塊的 ISource 指標。

從這個 propagator_block 物件取消連結所有來源區塊。

virtual void unlink_sources();

另請參閱

concurrency 命名空間
source_block 類別
ITarget 類別