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
メッセージ処理用のプロセッサの種類。
メンバー
パブリック typedef
名前 | 説明 |
---|---|
source_iterator |
この target_block オブジェクトの source_link_manager の反復子の型。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
target_block | target_block オブジェクトを構築します。 |
~target_block デストラクター | target_block オブジェクトを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
propagate | ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。 |
send | ソース ブロックからこのターゲット ブロックにメッセージを同期的に渡します。 |
保護メソッド
名前 | 説明 |
---|---|
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
オブジェクトで直接呼び出すことはできません。 ブロックは、ISource
ブロックで link_target
メソッドを使用して一緒に接続する必要があります。これにより、対応するターゲットで 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> *);
propagate
ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。
virtual message_status propagate(
_Inout_opt_ message<_Source_type>* _PMessage,
_Inout_opt_ ISource<_Source_type>* _PSource);
パラメーター
_PMessage
message
オブジェクトを指すポインター。
_PSource
メッセージを提供するソース ブロックへのポインター。
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
解説
_PMessage
パラメーターまたは _PSource
パラメーターのいずれかが NULL
の場合、メソッドは invalid_argument 例外をスローします。
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
メッセージを提供するソース ブロックへのポインター。
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
register_filter
受信したすべてのメッセージに対して呼び出されるフィルター メソッドを登録します。
void register_filter(filter_method const& _Filter);
パラメーター
_Filter
フィルター メソッド。
remove_sources
未処理の非同期送信操作が完了するのを待機した後、すべてのソースのリンクを解除します。
void remove_sources();
解説
すべてのターゲット ブロックは、デストラクター内のソースを削除するために、このルーチンを呼び出す必要があります。
[Send]
ソース ブロックからこのターゲット ブロックにメッセージを同期的に渡します。
virtual message_status send(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource);
パラメーター
_PMessage
message
オブジェクトを指すポインター。
_PSource
メッセージを提供するソース ブロックへのポインター。
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
解説
_PMessage
パラメーターまたは _PSource
パラメーターのいずれかが NULL
の場合、メソッドは invalid_argument 例外をスローします。
メッセージの開始時以外に send
メソッドを使用し、ネットワーク内でメッセージを伝達することは危険であり、デッドロックにつながる可能性があります。
send
が返された場合、メッセージは既に受け取られていて、ターゲット ブロックに転送されているか、ターゲットによって拒否されています。
send_message
派生クラスでオーバーライドされた場合、このメソッドは、ISource
ブロックからこの target_block
オブジェクトにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send
メソッドによって呼び出されます。
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
解説
既定では、派生クラスによってオーバーライドされない限り、このブロックは 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();
解説
メッセージ ブロック デストラクターはこのメソッドを使用して、ブロックを破棄する前に、すべての非同期操作を完了する時間を確保します。