propagator_block 類別
propagator_block
類別是同時為來源和目標之訊息區塊的抽象基底類別。 它結合 source_block
和 target_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
大部分功能會在這裡復寫。
繼承階層架構
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
要用於排程工作的排程群組。
link_source
將指定的來源區塊鏈接至這個 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
提供訊息的來源區塊指標。
傳回值
備註
方法 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
提供訊息的來源區塊指標。
傳回值
propagator_block
建構 propagator_block
物件。
propagator_block();
~propagator_block
終結 propagator_block
物件。
virtual ~propagator_block();
register_filter
註冊將在每個接收的訊息上叫用的篩選方法。
void register_filter(filter_method const& _Filter);
參數
_濾波器
篩選方法。
remove_network_links
從這個 propagator_block
物件移除所有來源和目標網路連結。
void remove_network_links();
傳送
同步起始此區塊的訊息。 區塊呼叫 ISource
。 當此函式完成時,訊息已經傳播到 區塊中。
virtual message_status send(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource);
參數
_PMessage
message
物件的指標。
_PSource
提供訊息的來源區塊指標。
傳回值
備註
如果 _PMessage
或 參數為 NULL
,這個方法會擲回invalid_argument_PSource
例外狀況。
send_message
在衍生類別中覆寫時,這個方法會同步將訊息從 ISource
區塊傳遞至這個 propagator_block
物件。 send
當來源區塊呼叫時,方法會叫用它。
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
傳回值
備註
根據預設,除非由衍生類別覆寫,否則此區塊會 declined
傳回 。
unlink_source
從這個 propagator_block
物件取消連結指定的來源區塊。
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
參數
_PSource
要取消連結之區塊的 ISource
指標。
unlink_sources
從這個 propagator_block
物件取消連結所有來源區塊。
virtual void unlink_sources();