ISource クラス

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();

派生クラスでオーバーライドされると、ターゲット ブロックをこの 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 のどちらかを呼び出して、メッセージの所有権を取得または放棄する必要があります。

派生クラスでオーバーライドされると、以前にリンクされていたことがわかった場合は、この ISource ブロックからターゲット ブロックのリンクを解除します。

virtual void unlink_target(_Inout_ ITarget<T>* _PTarget) = 0;

パラメーター

_PTarget
この ISource ブロックからリンクを解除されているターゲット ブロックへのポインター。

派生クラスでオーバーライドされると、この ISource ブロックからすべてのターゲット ブロックのリンクを解除します。

virtual void unlink_targets() = 0;

関連項目

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