target_block 類別
target_block
類別是一種抽象基底類別,可提供基本的連結管理功能和僅限目標區塊的錯誤檢查。
語法
template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;
參數
_SourceLinkRegistry
用來存放來源連結的連結登錄。
_MessageProcessorType
訊息處理的處理器類型。
成員
公用 Typedefs
名稱 | 描述 |
---|---|
source_iterator |
這個target_block 物件之的反覆運算器source_link_manager 型別。 |
公用建構函式
名稱 | 描述 |
---|---|
target_block | 建構 target_block 物件。 |
~target_block解構函式 | target_block 終結物件。 |
公用方法
名稱 | 描述 |
---|---|
傳播 | 以異步方式將訊息從來源區塊傳遞至此目標區塊。 |
傳送 | 以同步方式將訊息從來源區塊傳遞至此目標區塊。 |
受保護的方法
名稱 | 描述 |
---|---|
async_send | 以異步方式傳送訊息進行處理。 |
decline_incoming_messages | 向區塊指出應該拒絕新訊息。 |
enable_batched_processing | 啟用這個區塊的批次處理。 |
initialize_target | 初始化基底物件。 具體而言, message_processor 必須初始化 物件。 |
link_source | 將指定的來源區塊鏈接至這個 target_block 物件。 |
process_input_messages | 處理收到的輸入訊息。 |
process_message | 在衍生類別中覆寫時,處理這個 target_block 物件接受的訊息。 |
propagate_message | 在衍生類別中覆寫時,這個方法會以異步方式將訊息從 ISource 區塊傳遞至這個 target_block 物件。 propagate 當來源區塊呼叫時,方法會叫用它。 |
register_filter | 註冊將在收到的每個訊息上叫用的篩選方法。 |
remove_sources | 等候未完成的異步傳送作業完成之後,取消連結所有來源。 |
send_message | 在衍生類別中覆寫時,這個方法會同步將訊息從 ISource 區塊傳遞至這個 target_block 物件。 send 當來源區塊呼叫時,方法會叫用它。 |
sync_send | 同步傳送訊息以供處理。 |
unlink_source | 從這個 target_block 物件取消連結指定的來源區塊。 |
unlink_sources | 從這個 target_block 物件取消連結所有來源區塊。 (覆寫 ITarget::unlink_sources. |
wait_for_async_sends | 等候所有異步傳播完成。 |
繼承階層架構
target_block
需求
標頭: agents.h
命名空間: concurrency
async_send
以異步方式傳送訊息進行處理。
void async_send(_Inout_opt_ message<_Source_type>* _PMessage);
參數
_PMessage
要傳送之訊息的指標。
decline_incoming_messages
向區塊指出應該拒絕新訊息。
void decline_incoming_messages();
備註
解構函式會呼叫這個方法,以確保在解構進行時拒絕新的訊息。
enable_batched_processing
啟用這個區塊的批次處理。
void enable_batched_processing();
initialize_target
初始化基底物件。 具體而言, message_processor
必須初始化 物件。
void initialize_target(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
參數
_PScheduler
要用於排程工作的排程器。
_PScheduleGroup
要用於排程工作的排程群組。
link_source
將指定的來源區塊鏈接至這個 target_block
物件。
virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);
參數
_PSource
要連結之區塊的 ISource
指標。
備註
不應該直接在物件上 target_block
呼叫此函式。 區塊應該使用 link_target
區塊上的 ISource
方法連接在一起,這會在對應的目標上叫 link_source
用 方法。
process_input_messages
處理收到的輸入訊息。
virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);
參數
_PMessage
要處理的訊息指標。
process_message
在衍生類別中覆寫時,處理這個 target_block
物件接受的訊息。
virtual void process_message(message<_Source_type> *);
傳播
以異步方式將訊息從來源區塊傳遞至此目標區塊。
virtual message_status propagate(
_Inout_opt_ message<_Source_type>* _PMessage,
_Inout_opt_ ISource<_Source_type>* _PSource);
參數
_PMessage
message
物件的指標。
_PSource
提供訊息的來源區塊指標。
傳回值
備註
如果 _PMessage
或參數為 NULL
,則方法會擲回invalid_argument_PSource
例外狀況。
propagate_message
在衍生類別中覆寫時,這個方法會以異步方式將訊息從 ISource
區塊傳遞至這個 target_block
物件。 propagate
當來源區塊呼叫時,方法會叫用它。
virtual message_status propagate_message(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource) = 0;
參數
_PMessage
message
物件的指標。
_PSource
提供訊息的來源區塊指標。
傳回值
register_filter
註冊將在收到的每個訊息上叫用的篩選方法。
void register_filter(filter_method const& _Filter);
參數
_濾波器
篩選方法。
remove_sources
等候未完成的異步傳送作業完成之後,取消連結所有來源。
void remove_sources();
備註
所有目標區塊都應該呼叫此例程,以移除其解構函式中的來源。
傳送
以同步方式將訊息從來源區塊傳遞至此目標區塊。
virtual message_status send(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource);
參數
_PMessage
message
物件的指標。
_PSource
提供訊息的來源區塊指標。
傳回值
備註
如果 _PMessage
或參數為 NULL
,則方法會擲回invalid_argument_PSource
例外狀況。
send
在訊息起始之外使用 方法來傳播網路內的訊息很危險,而且可能會導致死結。
傳回時 send
,訊息已接受並傳輸至目標區塊,或已由目標拒絕。
send_message
在衍生類別中覆寫時,這個方法會同步將訊息從 ISource
區塊傳遞至這個 target_block
物件。 send
當來源區塊呼叫時,方法會叫用它。
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
傳回值
備註
根據預設,除非由衍生類別覆寫,否則此區塊會 declined
傳回 。
sync_send
同步傳送訊息以供處理。
void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);
參數
_PMessage
要傳送之訊息的指標。
target_block
建構 target_block
物件。
target_block();
~target_block
target_block
終結物件。
virtual ~target_block();
unlink_source
從這個 target_block
物件取消連結指定的來源區塊。
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
參數
_PSource
要取消連結之區塊的 ISource
指標。
unlink_sources
從這個 target_block
物件取消連結所有來源區塊。
virtual void unlink_sources();
wait_for_async_sends
等候所有異步傳播完成。
void wait_for_async_sends();
備註
訊息區塊解構函式會使用這個方法,以確保所有異步操作在終結區塊之前都有時間完成。