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
メッセージ処理用のプロセッサの種類。
メンバー
パブリック typedef
名前 | 説明 |
---|---|
source_iterator |
この propagator_block オブジェクトの source_link_manager の反復子の型。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
propagator_block | propagator_block オブジェクトを構築します。 |
~propagator_block Destructor | propagator_block オブジェクトを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
propagate | ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。 |
send | このブロックへのメッセージを同期的に開始します。 ISource ブロックによって呼び出されます。 この関数が完了すると、メッセージは既にブロックに反映されています。 |
保護メソッド
名前 | 説明 |
---|---|
decline_incoming_messages | 新しいメッセージを拒否する用にブロックに指示します。 |
initialize_source_and_target | 基本オブジェクトを初期化します。 具体的には、message_processor オブジェクトを初期化する必要があります。 |
link_source | 指定されたソース ブロックをこの propagator_block オブジェクトにリンクします。 |
process_input_messages | 入力メッセージを処理します。 これは、source_block から派生した伝達子ブロックにのみ有効です ( 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
処理するメッセージへのポインター。
propagate
ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。
virtual message_status propagate(
_Inout_opt_ message<_Source_type>* _PMessage,
_Inout_opt_ ISource<_Source_type>* _PSource);
パラメーター
_PMessage
message
オブジェクトを指すポインター。
_PSource
メッセージを提供するソース ブロックへのポインター。
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
解説
propagate
メソッドは、リンクされたソースブロックによってターゲット ブロックで呼び出されます。 メッセージがまだキューに登録されていない場合、または実行中でない場合は、非同期タスクをキューに配置してメッセージを処理します。
_PMessage
パラメーターまたは _PSource
パラメーターのいずれかが NULL
の場合、メソッドは invalid_argument 例外をスローします。
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);
パラメーター
_Filter
フィルター メソッド。
remove_network_links
この propagator_block
オブジェクトから、ソースとターゲットのネットワーク リンクをすべて削除します。
void remove_network_links();
[Send]
このブロックへのメッセージを同期的に開始します。 ISource
ブロックによって呼び出されます。 この関数が完了すると、メッセージは既にブロックに反映されています。
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_message
派生クラスでオーバーライドされた場合、このメソッドは、ISource
ブロックからこの propagator_block
オブジェクトにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send
メソッドによって呼び出されます。
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
解説
既定では、派生クラスによってオーバーライドされない限り、このブロックは declined
を返します。
unlink_source
この propagator_block
オブジェクトから指定されたソース ブロックのリンクを解除します。
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
パラメーター
_PSource
リンクが解除される ISource
ブロックへのポインター。
unlink_sources
この propagator_block
オブジェクトからすべてのソース ブロックのリンクを解除します。
virtual void unlink_sources();