join メッセージング ブロックは、単一のターゲットと複数のソースを持つ順序付けられた propagator_block であり、各ソースから、種類が T であるメッセージを結合します。
構文
template<class T,
join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
multi_link_registry<ISource<T>>>;
パラメーター
T
ブロックで結合され、伝達されるメッセージのペイロードの型。
_Jtype
join ブロックの種類 (greedy または non_greedy)
メンバー
パブリック コンストラクター
| 名前 | 説明 |
|---|---|
| join | 過負荷です。 join メッセージング ブロックを構築します。 |
| ~join デストラクター | join ブロックを破棄します。 |
保護メソッド
| 名前 | 説明 |
|---|---|
| accept_message | この join メッセージング ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。 |
| consume_message | この join メッセージング ブロックから以前に提供され、ターゲットによって予約されているメッセージを使用し、所有権を呼び出し元に譲渡します。 |
| link_target_notification | この join メッセージング ブロックに新しいターゲットがリンクされたことを通知するコールバック。 |
| propagate_message | ISource ブロックからこの join メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。 |
| propagate_to_any_targets | すべてのソースがメッセージを伝達したら、各ソースからの入力メッセージを含む出力メッセージを構築します。 この出力メッセージを各ターゲットに送信します。 |
| release_message | 以前のメッセージの予約を解除します。 (source_block::release_message をオーバーライドします。) |
| reserve_message | この join メッセージング ブロックから以前に提供されたメッセージを予約します。 (source_block::reserve_message をオーバーライドします。) |
| resume_propagation | 予約が解除された後、伝達を再開します。 (source_block::resume_propagation をオーバーライドします。) |
解説
詳細については、「非同期メッセージ ブロック」を参照してください。
継承階層
join
要件
ヘッダー: agents.h
名前空間: concurrency
accept_message
この join メッセージング ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。
virtual message<_OutputType>* accept_message(runtime_object_identity _MsgId);
パラメーター
_MsgId
提供された message オブジェクトの runtime_object_identity。
戻り値
現在呼び出し元が所有権を持っている message オブジェクトへのポインター。
consume_message
この join メッセージング ブロックから以前に提供され、ターゲットによって予約されているメッセージを使用し、所有権を呼び出し元に譲渡します。
virtual message<_OutputType>* consume_message(runtime_object_identity _MsgId);
パラメーター
_MsgId
使用されている message オブジェクトの runtime_object_identity。
戻り値
現在呼び出し元が所有権を持っている message オブジェクトへのポインター。
解説
accept に似ていますが、常に reserve の呼び出しが先に行われます。
join
join メッセージング ブロックを構築します。
join(
size_t _NumInputs);
join(
size_t _NumInputs,
filter_method const& _Filter);
join(
Scheduler& _PScheduler,
size_t _NumInputs);
join(
Scheduler& _PScheduler,
size_t _NumInputs,
filter_method const& _Filter);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs,
filter_method const& _Filter);
パラメーター
_NumInputs
この join ブロックに許可される入力の数。
_Filter
提供されたメッセージを受け入れるかどうかを決定するフィルター関数。
_PScheduler
その内部で Scheduler メッセージング ブロックの反映タスクがスケジュールされる join オブジェクト。
_PScheduleGroup
その内部で ScheduleGroup メッセージング ブロックの反映タスクがスケジュールされる join オブジェクト。 使用される Scheduler オブジェクトは、スケジュール グループによって暗黙的に指定されます。
解説
_PScheduler または _PScheduleGroup パラメーターを指定しない場合、ランタイムは既定のスケジューラを使用しています。
filter_method 型は、提供されたメッセージを受け入れるかどうかを決定するためにこの join メッセージング ブロックによって呼び出される、シグネチャ bool (T const &) を持つファンクタです。
~接続
join ブロックを破棄します。
~join();
link_target_notification
この join メッセージング ブロックに新しいターゲットがリンクされたことを通知するコールバック。
virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);
propagate_message
ISource ブロックからこの join メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。
message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
パラメーター
_PMessage
message オブジェクトを指すポインター。
_PSource
メッセージを提供するソース ブロックへのポインター。
戻り値
ターゲットがメッセージをどのように処理したのかを示す message_status。
propagate_to_any_targets
すべてのソースがメッセージを伝達したら、各ソースからの入力メッセージを含む出力メッセージを構築します。 この出力メッセージを各ターゲットに送信します。
void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);
release_message
以前のメッセージの予約を解除します。
virtual void release_message(runtime_object_identity _MsgId);
パラメーター
_MsgId
解放する message オブジェクトの runtime_object_identity。
reserve_message
この join メッセージング ブロックから以前に提供されたメッセージを予約します。
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();