次の方法で共有


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 クラスのほとんどの機能は、ここでレプリケートされます。

継承階層

ISource

ITarget

source_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
タスクをスケジュールするために使用されるスケジューラ グループ。

指定されたソース ブロックをこの 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
フィルター メソッド。

この 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 を返します。

この propagator_block オブジェクトから指定されたソース ブロックのリンクを解除します。

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

パラメーター

_PSource
リンクが解除される ISource ブロックへのポインター。

この propagator_block オブジェクトからすべてのソース ブロックのリンクを解除します。

virtual void unlink_sources();

関連項目

コンカレンシー名前空間
source_block クラス
ITarget クラス