unbounded_buffer クラス

unbounded_buffer メッセージング ブロックは、メッセージを無制限に格納することができる、複数のターゲットと複数のソースを持つ順序付けられた propagator_block です。

構文

template<
   class             _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget<            _Type>>, multi_link_registry<ISource<            _Type>>>;

パラメーター

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

メンバー

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

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

パブリック メソッド

名前 説明
dequeue unbounded_buffer メッセージングブロックから項目を削除します。
enqueue unbounded_buffer メッセージングブロックに項目を追加します。

保護メソッド

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

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

継承階層

ISource

ITarget

source_block

propagator_block

unbounded_buffer

必要条件

ヘッダー: agents.h

名前空間: concurrency

accept_message

この unbounded_buffer メッセージング ブロックから提供されたメッセージを受け入れ、所有権を呼び出し元に譲渡します。

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

パラメーター

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

戻り値

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

consume_message

この unbounded_buffer メッセージング ブロックから以前に提供され、ターゲットによって予約されているメッセージを使用し、所有権を呼び出し元に譲渡します。

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

パラメーター

_MsgId
使用されている message オブジェクトの runtime_object_identity

戻り値

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

解説

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

dequeue

unbounded_buffer メッセージングブロックから項目を削除します。

_Type dequeue();

戻り値

unbounded_buffer から削除されたメッセージのペイロード。

enqueue

unbounded_buffer メッセージングブロックに項目を追加します。

bool enqueue(
   _Type const&                 _Item
);

パラメーター

_Item
追加するアイテムです。

戻り値

受理された場合は true、そうでない場合は false となります。

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

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

パラメーター

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

propagate_message

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

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

パラメーター

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

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

戻り値

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

propagate_output_messages

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

virtual void propagate_output_messages();

解説

unbounded_buffer で他のメッセージがすでにこのメッセージより前にある場合、リンクされたターゲットへの伝達は、それ以前のメッセージが受け入れられるか消費されるまで起こりません。 accept または consume に成功した最初のリンク先が所有権を持ち、他のターゲットはそのメッセージを取得することができません。

process_input_messages

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

virtual void process_input_messages(
   _Inout_ message<_Type> *                 _PMessage
);

パラメーター

_PMessage
処理するメッセージへのポインター。

release_message

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

virtual void release_message(
   runtime_object_identity                 _MsgId
);

パラメーター

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

reserve_message

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

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 ブロックからこの unbounded_buffer メッセージング ブロックにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。

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

パラメーター

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

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

戻り値

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

supports_anonymous_source

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

virtual bool supports_anonymous_source();

戻り値

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

unbounded_buffer

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

unbounded_buffer();

unbounded_buffer(
   filter_method const&                 _Filter
);

unbounded_buffer(
   Scheduler&                 _PScheduler
);

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

unbounded_buffer(
   ScheduleGroup&                 _PScheduleGroup
);

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

パラメーター

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

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

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

解説

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

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

~unbounded_buffer

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

~unbounded_buffer();

関連項目

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