ISource クラスは、すべてのソース ブロック用のインターフェイスです。 ソース ブロックは、メッセージを ITarget ブロックに伝達します。
構文
template<class T>
class ISource;
パラメーター
T
ソース ブロックによって生成されるメッセージ内のペイロードのデータ型。
メンバー
パブリック typedef
| 名前 | 説明 |
|---|---|
source_type |
T の型エイリアス。 |
パブリック コンストラクター
| 名前 | 説明 |
|---|---|
| ~ISource デストラクター | ISource オブジェクトを破棄します。 |
パブリック メソッド
| 名前 | 説明 |
|---|---|
| accept | 派生クラスでオーバーライドされると、この ISource ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。 |
| acquire_ref | 派生クラスでオーバーライドされると、削除を防ぐために、この ISource ブロックの参照数を取得します。 |
| 使用 | 派生クラスでオーバーライドされると、この ISource ブロックから過去に提供され、ターゲットによって正常に予約されているメッセージを使用して、所有権を呼び出し元に譲渡します。 |
| link_target | 派生クラスでオーバーライドされると、ターゲット ブロックをこの ISource ブロックにリンクします。 |
| release | 派生クラスでオーバーライドされると、以前に成功したメッセージ予約を解放します。 |
| release_ref | 派生クラスでオーバーライドされると、この ISource ブロックの参照数を解放します。 |
| reserve | 派生クラスでオーバーライドされると、この ISource ブロックによって以前に提供されたメッセージを予約します。 |
| unlink_target | 派生クラスでオーバーライドされると、以前にリンクされていたことがわかった場合は、この ISource ブロックからターゲット ブロックのリンクを解除します。 |
| unlink_targets | 派生クラスでオーバーライドされると、この ISource ブロックからすべてのターゲット ブロックのリンクを解除します。 |
解説
詳細については、「非同期メッセージ ブロック」を参照してください。
継承階層
ISource
要件
ヘッダー: agents.h
名前空間: concurrency
accept
派生クラスでオーバーライドされると、この ISource ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。
virtual message<T>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_MsgId
提供された message オブジェクトの runtime_object_identity。
_PTarget
accept メソッドを呼び出しているターゲット ブロックへのポインター。
戻り値
現在呼び出し元が所有権を持っているメッセージへのポインター。
解説
この ISource ブロックによってメッセージが提供されている間に、accept メソッドがターゲットによって呼び出されます。 このソースがメッセージのコピーを作成する場合、返されるメッセージ ポインターは、ITarget ブロックの propagate メソッドに渡されるメッセージ ポインターとは異なる場合があります。
acquire_ref
派生クラスでオーバーライドされると、削除を防ぐために、この ISource ブロックの参照数を取得します。
virtual void acquire_ref(_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_PTarget
このメソッドを呼び出しているターゲット ブロックへのポインター。
解説
このメソッドは、link_target メソッドの実行中にこのソースにリンクされる ITarget オブジェクトによって呼び出されます。
消費
派生クラスでオーバーライドされると、この ISource ブロックから過去に提供され、ターゲットによって正常に予約されているメッセージを使用して、所有権を呼び出し元に譲渡します。
virtual message<T>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_MsgId
予約された message オブジェクトの runtime_object_identity。
_PTarget
consume メソッドを呼び出しているターゲット ブロックへのポインター。
戻り値
現在呼び出し元が所有権を持っている message オブジェクトへのポインター。
解説
consume メソッドは accept に似ていますが、必ず、このメソッドの前に reserve の呼び出しで true が返されている必要があります。
~ISource
ISource オブジェクトを破棄します。
virtual ~ISource();
link_target
派生クラスでオーバーライドされると、ターゲット ブロックをこの ISource ブロックにリンクします。
virtual void link_target(_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_PTarget
この ISource ブロックにリンクされているターゲット ブロックへのポインター。
release
派生クラスでオーバーライドされると、以前に成功したメッセージ予約を解放します。
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_MsgId
予約された message オブジェクトの runtime_object_identity。
_PTarget
release メソッドを呼び出しているターゲット ブロックへのポインター。
release_ref
派生クラスでオーバーライドされると、この ISource ブロックの参照数を解放します。
virtual void release_ref(_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_PTarget
このメソッドを呼び出しているターゲット ブロックへのポインター。
解説
このメソッドは、このソースからリンク解除されている ITarget オブジェクトによって呼び出されます。 ソース ブロックは、ターゲット ブロック用に予約されたすべてのリソースを解放できます。
予約
派生クラスでオーバーライドされると、この ISource ブロックによって以前に提供されたメッセージを予約します。
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_MsgId
提供された message オブジェクトの runtime_object_identity。
_PTarget
reserve メソッドを呼び出しているターゲット ブロックへのポインター。
戻り値
メッセージが正常に予約された場合は true、それ以外の場合は false。 予約は、さまざまな理由で失敗する可能性があります。たとえば、メッセージが別のターゲットによって既に予約されているか受け入れられている場合や、ソースが予約を拒否できる場合などです。
解説
reserve を呼び出し、それが成功したら、consume または release のどちらかを呼び出して、メッセージの所有権を取得または放棄する必要があります。
unlink_target
派生クラスでオーバーライドされると、以前にリンクされていたことがわかった場合は、この ISource ブロックからターゲット ブロックのリンクを解除します。
virtual void unlink_target(_Inout_ ITarget<T>* _PTarget) = 0;
パラメーター
_PTarget
この ISource ブロックからリンクを解除されているターゲット ブロックへのポインター。
unlink_targets
派生クラスでオーバーライドされると、この ISource ブロックからすべてのターゲット ブロックのリンクを解除します。
virtual void unlink_targets() = 0;