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