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 | このunbounded_buffer メッセージング ブロックにmessage _PMessage を配置し、リンクされているすべてのターゲットに提供しようとします。 |
propagate_message | ISource ブロックからこの unbounded_buffer メッセージング ブロックにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。 |
propagate_output_messages | このunbounded_buffer メッセージング ブロックにmessage _PMessage を配置し、リンクされているすべてのターゲットに提供しようとします。 (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 をオーバーライドします。) |
詳細については、「非同期メッセージ ブロック」を参照してください。
継承階層
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
となります。
link_target_notification
この 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
このunbounded_buffer
メッセージング ブロックにmessage
_PMessage
を配置し、リンクされているすべてのターゲットに提供しようとします。
virtual void propagate_output_messages();
解説
unbounded_buffer
で他のメッセージがすでにこのメッセージより前にある場合、リンクされたターゲットへの伝達は、それ以前のメッセージが受け入れられるか消費されるまで起こりません。 accept
または consume
に成功した最初のリンク先が所有権を持ち、他のターゲットはそのメッセージを取得することができません。
process_input_messages
このunbounded_buffer
メッセージング ブロックにmessage
_PMessage
を配置し、リンクされているすべてのターゲットに提供しようとします。
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();