multitype_join クラス
multitype_join メッセージング ブロックは、複数のソースと単一のターゲットを持つメッセージング ブロックで、それぞれのソースから受け取った異なる種類のメッセージを 1 つに結合して、結合されたメッセージのタプルをターゲットに渡します。
構文
template<
typename T,
join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;
パラメーター
T
ブロックで結合され、伝達されるメッセージの tuple ペイロードの型。
_Jtype
join ブロックの種類 (greedy または non_greedy)
メンバー
パブリック typedef
| 名前 | 説明 |
|---|---|
type |
T の型のエイリアス。 |
パブリック コンストラクター
| 名前 | 説明 |
|---|---|
| multitype_join | オーバーロードされます。 multitype_join メッセージング ブロックを構築します。 |
| ~multitype_join デストラクター | multitype_join メッセージング ブロックを破棄します。 |
パブリック メソッド
| 名前 | 説明 |
|---|---|
| accept | この multitype_join ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。 |
| acquire_ref | この multitype_join メッセージング ブロックの参照カウントを取得して、削除を防ぎます。 |
| 使用 | この multitype_join メッセージング ブロックから以前に提供され、ターゲットによって正常に予約されているメッセージを使用して、所有権を呼び出し元に譲渡します。 |
| link_target | この multitype_join メッセージング ブロックにターゲット ブロックをリンクします。 |
| release | 以前に成功したメッセージの予約を解除します。 |
| release_ref | この multiple_join メッセージング ブロックの参照カウントを解除します。 |
| 予約 | この multitype_join メッセージング ブロックから以前に提供されたメッセージを予約します。 |
| unlink_target | この multitype_join メッセージング ブロックからターゲット ブロックをリンク解除します。 |
| unlink_targets | この multitype_join メッセージング ブロックからすべてのターゲットをリンク解除します (ISource::unlink_targets をオーバーライドします)。 |
解説
詳細については、「非同期メッセージ ブロック」を参照してください。
継承階層
multitype_join
必要条件
ヘッダー: agents.h
名前空間: concurrency
accept
この multitype_join ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。
virtual message<_Destination_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_MsgId
提供された message オブジェクトの runtime_object_identity。
_PTarget
accept メソッドを呼び出しているターゲット ブロックへのポインター。
戻り値
現在呼び出し元が所有権を持っているメッセージへのポインター。
acquire_ref
この multitype_join メッセージング ブロックの参照カウントを取得して、削除を防ぎます。
virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_PTarget
このメソッドを呼び出しているターゲット ブロックへのポインター。
解説
このメソッドは、link_target メソッドの実行中にこのソースにリンクされる ITarget オブジェクトによって呼び出されます。
使用処理
この multitype_join メッセージング ブロックから以前に提供され、ターゲットによって正常に予約されているメッセージを使用して、所有権を呼び出し元に譲渡します。
virtual message<_Destination_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_MsgId
予約された message オブジェクトの runtime_object_identity。
_PTarget
consume メソッドを呼び出しているターゲット ブロックへのポインター。
戻り値
現在呼び出し元が所有権を持っている message オブジェクトへのポインター。
解説
consume メソッドは accept に似ていますが、必ず、このメソッドの前に reserve の呼び出しで true が返されている必要があります。
link_target
この multitype_join メッセージング ブロックにターゲット ブロックをリンクします。
virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_PTarget
この multitype_join メッセージング ブロックにリンクする ITarget ブロックへのポインター。
multitype_join
multitype_join メッセージング ブロックを構築します。
explicit multitype_join(
T _Tuple);
multitype_join(
Scheduler& _PScheduler,
T _Tuple);
multitype_join(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
multitype_join(
multitype_join&& _Join);
パラメーター
_Tuple
この tuple メッセージング ブロックのソースの multitype_join です。
_PScheduler
その内部で Scheduler メッセージング ブロックの反映タスクがスケジュールされる multitype_join オブジェクト。
_PScheduleGroup
その内部で ScheduleGroup メッセージング ブロックの反映タスクがスケジュールされる multitype_join オブジェクト。 使用される Scheduler オブジェクトは、スケジュール グループによって暗黙的に指定されます。
_Join
コピー元の multitype_join メッセージング ブロックです。 元のオブジェクトが孤立しており、これが移動コンストラクターになることに注意してください。
解説
_PScheduler または _PScheduleGroup パラメーターを指定しない場合、ランタイムは既定のスケジューラを使用しています。
移動の構築はロックの状況では行われません。ということは、移動時に処理中の軽量タスクがないことを確認するのはユーザーの責任です。 そうしないと、例外または不整合な状態で、多数の競合が発生します。
~multitype_join
multitype_join メッセージング ブロックを破棄します。
~multitype_join();
release
以前に成功したメッセージの予約を解除します。
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_MsgId
解放する message オブジェクトの runtime_object_identity。
_PTarget
release メソッドを呼び出しているターゲット ブロックへのポインター。
release_ref
この multiple_join メッセージング ブロックの参照カウントを解除します。
virtual void release_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_PTarget
このメソッドを呼び出しているターゲット ブロックへのポインター。
解説
このメソッドは、このソースからリンク解除されている ITarget オブジェクトによって呼び出されます。 ソース ブロックは、ターゲット ブロック用に予約されたすべてのリソースを解放できます。
予約
この multitype_join メッセージング ブロックから以前に提供されたメッセージを予約します。
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_MsgId
予約する message オブジェクトの runtime_object_identity。
_PTarget
reserve メソッドを呼び出しているターゲット ブロックへのポインター。
戻り値
メッセージが正常に予約された場合は true、それ以外の場合は false。 予約は、さまざまな理由で失敗する可能性があります。たとえば、メッセージが別のターゲットによって既に予約されているか受け入れられている場合や、ソースが予約を拒否できる場合などです。
解説
reserve を呼び出し、それが成功したら、consume または release のどちらかを呼び出して、メッセージの所有権を取得または放棄する必要があります。
unlink_target
この multitype_join メッセージング ブロックからターゲット ブロックをリンク解除します。
virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);
パラメーター
_PTarget
この multitype_join メッセージング ブロックからリンク解除する ITarget ブロックへのポインター。
unlink_targets
この multitype_join メッセージング ブロックからすべてのターゲットをリンク解除します
virtual void unlink_targets();