次の方法で共有


transformer クラス

transformer メッセージング ブロックは、単一のターゲットと複数のソースを持つ順序付けられた propagator_block であり、1 つの種類のメッセージを複数受け入れ、別の種類のメッセージを無制限に格納することができます。

構文

template<class _Input, class _Output>
class transformer : public propagator_block<single_link_registry<ITarget<_Output>>,
    multi_link_registry<ISource<_Input>>>;

パラメーター

_Input
バッファーによって受け入れられたメッセージのペイロードの型。

_Output
バッファーに格納され、伝達されたメッセージのペイロードの型。

メンバー

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

名前 説明
transformer 過負荷です。 transformer メッセージング ブロックを構築します。
~transformer デストラクター transformer メッセージング ブロックを破棄します。

保護メソッド

名前 説明
accept_message この transformer メッセージング ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。
consume_message この transformer から以前に提供され、ターゲットによって予約されているメッセージを使用し、所有権を呼び出し元に譲渡します。
link_target_notification この transformer メッセージング ブロックに新しいターゲットがリンクされたことを通知するコールバック。
propagate_message ISource ブロックからこの transformer メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。
propagate_to_any_targets 入力メッセージに対して transformer 関数を実行します。
release_message 以前のメッセージの予約を解除します。 (source_block::release_message をオーバーライドします。)
reserve_message この transformer メッセージング ブロックから以前に提供されたメッセージを予約します。 (source_block::reserve_message をオーバーライドします。)
resume_propagation 予約が解除された後、伝達を再開します。 (source_block::resume_propagation をオーバーライドします。)
send_message ISource ブロックからこの transformer メッセージング ブロックにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。
supports_anonymous_source supports_anonymous_source メソッドをオーバーライドして、リンクされていないソースから提供されたメッセージをこのブロックが受け入れることができることを示します。 (ITarget::supports_anonymous_source をオーバーライドします。)

解説

詳細については、「非同期メッセージ ブロック」を参照してください。

継承階層

ISource

ITarget

source_block

propagator_block

transformer

要件

ヘッダー: agents.h

名前空間: concurrency

accept_message

この transformer メッセージング ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。

virtual message<_Output>* accept_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
提供された message オブジェクトの runtime_object_identity

戻り値

現在呼び出し元が所有権を持っている message オブジェクトへのポインター。

consume_message

この transformer から以前に提供され、ターゲットによって予約されているメッセージを使用し、所有権を呼び出し元に譲渡します。

virtual message<_Output>* consume_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
使用されている message オブジェクトの runtime_object_identity

戻り値

現在呼び出し元が所有権を持っている message オブジェクトへのポインター。

解説

accept に似ていますが、常に reserve の呼び出しが先に行われます。

この transformer メッセージング ブロックに新しいターゲットがリンクされたことを通知するコールバック。

virtual void link_target_notification(_Inout_ ITarget<_Output> *);

propagate_message

ISource ブロックからこの transformer メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。

virtual message_status propagate_message(
    _Inout_ message<_Input>* _PMessage,
    _Inout_ ISource<_Input>* _PSource);

パラメーター

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

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

戻り値

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

propagate_to_any_targets

入力メッセージに対して transformer 関数を実行します。

virtual void propagate_to_any_targets(_Inout_opt_ message<_Output> *);

release_message

以前のメッセージの予約を解除します。

virtual void release_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
解放する message オブジェクトの runtime_object_identity

reserve_message

この transformer メッセージング ブロックから以前に提供されたメッセージを予約します。

virtual bool reserve_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
予約する message オブジェクトの runtime_object_identity

戻り値

メッセージが正常に予約された場合は true、それ以外の場合は false

解説

reserve が呼び出された後、true が返された場合は、consume または release を呼び出して、メッセージの所有権を取得または解放する必要があります。

resume_propagation

予約が解除された後、伝達を再開します。

virtual void resume_propagation();

send_message

ISource ブロックからこの transformer メッセージング ブロックにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。

virtual message_status send_message(
    _Inout_ message<_Input>* _PMessage,
    _Inout_ ISource<_Input>* _PSource);

パラメーター

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

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

戻り値

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

supports_anonymous_source

supports_anonymous_source メソッドをオーバーライドして、リンクされていないソースから提供されたメッセージをこのブロックが受け入れることができることを示します。

virtual bool supports_anonymous_source();

戻り値

ブロックは提供されたメッセージを延期しないため、true です。

transformer

transformer メッセージング ブロックを構築します。

transformer(
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

transformer(
    Scheduler& _PScheduler,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    Scheduler& _PScheduler,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

transformer(
    ScheduleGroup& _PScheduleGroup,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    ScheduleGroup& _PScheduleGroup,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

パラメーター

_Func
受け入れられた各メッセージに対して呼び出される関数。

_PTarget
トランスフォーマーとリンクするターゲット ブロックへのポインター。

_Filter
提供されたメッセージを受け入れるかどうかを決定するフィルター関数。

_PScheduler
その内部で Scheduler メッセージング ブロックの反映タスクがスケジュールされる transformer オブジェクト。

_PScheduleGroup
その内部で ScheduleGroup メッセージング ブロックの反映タスクがスケジュールされる transformer オブジェクト。 使用される Scheduler オブジェクトは、スケジュール グループによって暗黙的に指定されます。

解説

_PScheduler または _PScheduleGroup パラメーターを指定しない場合、ランタイムは既定のスケジューラを使用しています。

_Transform_method 型は、メッセージを処理するためにこの transformer メッセージング ブロックによって呼び出される、シグネチャ _Output (_Input const &) を持つファンクタです。

filter_method 型は、提供されたメッセージを受け入れるかどうかを決定するためにこの transformer メッセージング ブロックによって呼び出される、シグネチャ bool (_Input const &) を持つファンクタです。

~変流器

transformer メッセージング ブロックを破棄します。

~transformer();

関連項目

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