次の方法で共有


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
メッセージ処理用のプロセッサの種類。

メンバー

パブリックTypedefs

名前 説明
source_iterator この source_link_manager オブジェクトの propagator_block の反復子の型。

パブリック コンストラクター

名前 説明
伝搬器ブロック propagator_block オブジェクトを構築します。
~propagator_block デストラクター propagator_block オブジェクトを破棄します。

パブリック メソッド

名前 説明
伝播する ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。
send このブロックへのメッセージを同期的に開始します。 ISource ブロックによって呼び出されます。 この関数が完了すると、メッセージは既にブロックに反映されています。

保護メソッド

名前 説明
受信メッセージを拒否 ブロックに新しいメッセージを受け付けないように設定します。
initialize_source_and_target 基本オブジェクトを初期化します。 具体的には、message_processor オブジェクトを初期化する必要があります。
link_source 指定されたソース ブロックをこの propagator_block オブジェクトにリンクします。
入力メッセージを処理する 入力メッセージを処理します。 これは、source_block から派生した伝達子ブロックにのみ有効です ( source_block::p rocess_input_messages をオーバーライドします)。
propagate_message 派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの propagator_block オブジェクトにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。
register_filter 受信したすべてのメッセージに対して呼び出されるフィルター メソッドを登録します。
ネットワークリンクを削除 この propagator_block オブジェクトから、ソースとターゲットのネットワーク リンクをすべて削除します。
send_message 派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの propagator_block オブジェクトにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。
ソース解除 この 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

着信メッセージ拒否

ブロックに新しいメッセージを受け付けないように設定します。

void decline_incoming_messages();

解説

デストラクターはこのメソッドを呼び出して、破棄の実行中に新しいメッセージが拒否されるようにします。

ソースとターゲットを初期化する

基本オブジェクトを初期化します。 具体的には、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 ブロックへのポインター。

入力メッセージを処理する

入力メッセージを処理します。 これは、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
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

解説

propagate メソッドは、リンクされたソースブロックによってターゲット ブロックで呼び出されます。 メッセージがまだキューに登録されていない場合、または実行中でない場合は、非同期タスクをキューに配置してメッセージを処理します。

または _PMessage のパラメーターが _PSource なら、invalid_argument 例外をメソッドはスローします。

プロパゲート_メッセージ

派生クラスでオーバーライドされた場合、このメソッドは、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 オブジェクトを破棄します。

virtual ~propagator_block();

register_filter

受信したすべてのメッセージに対して呼び出されるフィルター メソッドを登録します。

void register_filter(filter_method const& _Filter);

パラメーター

_Filter
フィルター メソッド。

この propagator_block オブジェクトから、ソースとターゲットのネットワーク リンクをすべて削除します。

void remove_network_links();

送信

このブロックへのメッセージを同期的に開始します。 ISource ブロックによって呼び出されます。 この関数が完了すると、メッセージは既にブロックに反映されています。

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

パラメーター

_PMessage
message オブジェクトを指すポインター。

_PSource
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

解説

invalid_argument 例外をスローします。_PMessage パラメーターまたは _PSource パラメーターのいずれかが NULL の場合。

メッセージを送信

派生クラスでオーバーライドされた場合、このメソッドは、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 クラス