次の方法で共有


overwrite_buffer クラス

overwrite_buffer メッセージング ブロックは、一度に 1 つのメッセージを格納することができる、複数のターゲットと複数のソースを持つ順序付けられた propagator_block です。 新しいメッセージが与えられると、それまで格納されていたメッセージは上書きされます。

構文

template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

パラメーター

T
バッファーに格納され、伝達されるメッセージのペイロードの型。

メンバー

パブリック コンストラクター

名前 説明
overwrite_buffer 過負荷です。 overwrite_buffer メッセージング ブロックを構築します。
~overwrite_buffer デストラクター overwrite_buffer メッセージング ブロックを破棄します。

パブリック メソッド

名前 説明
has_value この overwrite_buffer メッセージング ブロックに値がまだあるかどうかを確認します。
value overwrite_buffer メッセージング ブロックに格納されているメッセージの現在のペイロードへの参照を取得します。

保護メソッド

名前 説明
accept_message(受付メッセージ) この overwrite_buffer メッセージング ブロックによって提供されたメッセージを受け入れ、メッセージのコピーを呼び出し元に返します。
consume_message(メッセージを消費する) overwrite_buffer メッセージング ブロックによって以前に提供され、ターゲットによって予約されたメッセージを使用し、メッセージのコピーを呼び出し元に返します。
リンクターゲット通知 この overwrite_buffer メッセージング ブロックに新しいターゲットがリンクされたことを通知するコールバック。
propagate_message ISource ブロックからこの overwrite_buffer メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。
すべてのターゲットに伝播 message _PMessage をこの overwrite_buffer メッセージング ブロックに配置し、リンクされているすべてのターゲットに提供します。
release_message 以前のメッセージの予約を解除します。 (source_block::release_message をオーバーライドします。)
reserve_message この overwrite_buffer メッセージング ブロックから以前に提供されたメッセージを予約します。 (source_block::reserve_message をオーバーライドします。)
resume_propagation 予約が解除された後、伝達を再開します。 (source_block::resume_propagation をオーバーライドします。)
send_message ISource ブロックからこの overwrite_buffer メッセージング ブロックにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。
匿名ソースをサポートする supports_anonymous_source メソッドをオーバーライドして、リンクされていないソースから提供されたメッセージをこのブロックが受け入れることができることを示します。 (ITarget::supports_anonymous_source をオーバーライドします。)

解説

overwrite_buffer メッセージング ブロックは、格納されているメッセージのコピーを各ターゲットに伝達します。

詳細については、「非同期メッセージ ブロック」を参照してください。

継承階層

ISource

ITarget

source_block

伝搬器ブロック

overwrite_buffer

要件

ヘッダー: agents.h

名前空間: concurrency

メッセージ受信

この overwrite_buffer メッセージング ブロックによって提供されたメッセージを受け入れ、メッセージのコピーを呼び出し元に返します。

virtual message<T>* accept_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
提供された runtime_object_identity オブジェクトの message

戻り値

現在呼び出し元が所有権を持っている message オブジェクトへのポインター。

解説

overwrite_buffer メッセージング ブロックは、現在保持されているメッセージの所有権を譲渡するのではなく、メッセージのコピーをターゲットに返します。

メッセージを処理する

overwrite_buffer メッセージング ブロックによって以前に提供され、ターゲットによって予約されたメッセージを使用し、メッセージのコピーを呼び出し元に返します。

virtual message<T>* consume_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
消費される runtime_object_identity オブジェクトの message

戻り値

現在呼び出し元が所有権を持っている message オブジェクトへのポインター。

解説

accept に似ていますが、常に reserve の呼び出しが先に行われます。

ハス_バリュー

この overwrite_buffer メッセージング ブロックに値がまだあるかどうかを確認します。

bool has_value() const;

戻り値

ブロックが値を受け取った場合は true。それ以外の場合は false

この overwrite_buffer メッセージング ブロックに新しいターゲットがリンクされたことを通知するコールバック。

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

パラメーター

_PTarget
新しくリンクされたターゲットへのポインター。

~overwrite_buffer

overwrite_buffer メッセージング ブロックを破棄します。

~overwrite_buffer();

バッファ上書き

overwrite_buffer メッセージング ブロックを構築します。

overwrite_buffer();

overwrite_buffer(
    filter_method const& _Filter);

overwrite_buffer(
    Scheduler& _PScheduler);

overwrite_buffer(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

overwrite_buffer(
    ScheduleGroup& _PScheduleGroup);

overwrite_buffer(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

パラメーター

_Filter
提供されたメッセージを受け入れるかどうかを決定するフィルター関数。

_PScheduler
その内部で Scheduler メッセージング ブロックの反映タスクがスケジュールされる overwrite_buffer オブジェクト。

_PScheduleGroup
その内部で ScheduleGroup メッセージング ブロックの反映タスクがスケジュールされる overwrite_buffer オブジェクト。 使用される Scheduler オブジェクトは、スケジュール グループによって暗黙的に指定されます。

解説

_PScheduler または _PScheduleGroup パラメーターを指定しない場合、ランタイムは既定のスケジューラを使用しています。

filter_method 型は、提供されたメッセージを受け入れるかどうかを決定するためにこの bool (T const &) メッセージング ブロックによって呼び出される、シグネチャ overwrite_buffer を持つファンクタです。

プロパゲート_メッセージ

ISource ブロックからこの overwrite_buffer メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。

virtual message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

パラメーター

_PMessage
message オブジェクトを指すポインター。

_PSource
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

すべてのターゲットに伝播する

message _PMessage をこの overwrite_buffer メッセージング ブロックに配置し、リンクされているすべてのターゲットに提供します。

virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);

パラメーター

_PMessage
この message が所有権を取得した overwrite_buffer オブジェクトへのポインター。

解説

このメソッドは、新しく受け入れたメッセージ overwrite_buffer_PMessage 内の現在のメッセージを上書きします。

メッセージを送信

ISource ブロックからこの overwrite_buffer メッセージング ブロックにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

パラメーター

_PMessage
message オブジェクトを指すポインター。

_PSource
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

匿名のソースをサポートしている

supports_anonymous_source メソッドをオーバーライドして、リンクされていないソースから提供されたメッセージをこのブロックが受け入れることができることを示します。

virtual bool supports_anonymous_source();

戻り値

ブロックは提供されたメッセージを延期しないため、true です。

リリースメッセージ

以前のメッセージの予約を解除します。

virtual void release_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
解放する runtime_object_identity オブジェクトの message

予約メッセージ

この overwrite_buffer メッセージング ブロックから以前に提供されたメッセージを予約します。

virtual bool reserve_message(runtime_object_identity _MsgId);

パラメーター

_MsgId
予約されるruntime_object_identityオブジェクトのmessage

戻り値

メッセージが正常に予約された場合は true、それ以外の場合は false

解説

reserve が呼び出された後、true が返された場合は、consume または release を呼び出して、メッセージの所有権を取得または解放する必要があります。

プロパゲーション再開 (resume_propagation)

予約が解除された後、伝達を再開します。

virtual void resume_propagation();

overwrite_buffer メッセージング ブロックに格納されているメッセージの現在のペイロードへの参照を取得します。

T value();

戻り値

現在格納されているメッセージのペイロード。

解説

overwrite_buffer に格納されている値は、このメソッドから制御が戻った直後に変更される可能性があります。 overwrite_buffer に現在メッセージが格納されていない場合、このメソッドはメッセージが到着するまで待機します。

関連項目

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