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();