Freigeben über


unbounded_buffer-Klasse

Ein unbounded_buffer-Meldungsblock ist ein geordneter propagator_block mit mehreren Zielen und mehreren Quellen, der eine unbegrenzte Anzahl von Meldungen speichern kann.

Syntax

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

Parameter

_Typ
Der Nutzlasttyp der vom Puffer gespeicherten und weitergegebenen Nachrichten.

Mitglieder

Öffentliche Konstruktoren

Name Beschreibung
unbounded_buffer Überladen. Erstellt einen unbounded_buffer Nachrichtenblock.
~unbounded_buffer Destruktor Zerstört den unbounded_buffer Nachrichtenblock.

Öffentliche Methoden

Name Beschreibung
Dequeue (Entfernen aus der Warteschlange) Entfernt ein Element aus dem unbounded_buffer Nachrichtenblock.
in die Warteschlange einreihen Fügt dem unbounded_buffer Nachrichtenblock ein Element hinzu.

Geschützte Methoden

Name Beschreibung
nachricht_akzeptieren Akzeptiert eine Nachricht, die von diesem unbounded_buffer Nachrichtenblock angeboten wurde, und überträgt den Besitz an den Anrufer.
consume_message Eine zuvor vom unbounded_buffer Messaging-Block angebotene und vom Ziel reservierte Nachricht wird genutzt, um das Eigentum an den Anrufer zu übertragen.
link_target_notification Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem unbounded_buffer Messagingblock verknüpft wurde.
verarbeite_eingabe_nachrichten Platziert die message_PMessage in diesem unbounded_buffer-Nachrichtenblock und versucht, sie allen verbundenen Zielen anzubieten.
propagate_message Eine Nachricht wird asynchron von einem ISource Block an diesen unbounded_buffer Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
propagate_output_messages Platziert die message_PMessage in diesem unbounded_buffer-Nachrichtenblock und versucht, sie allen verbundenen Zielen anzubieten. (Überschreibt source_block::propagate_output_messages.)
release_message Veröffentlicht eine vorherige Nachrichtenreservierung. (Überschreibt source_block::release_message.)
reserve_message Reserviert eine Nachricht, die zuvor von diesem unbounded_buffer Nachrichtenblock angeboten wurde. (Überschreibt source_block::reserve_message.)
resume_propagation Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde. (Überschreibt source_block::resume_propagation.)
send_message Übergibt eine Nachricht synchron von einem ISource Block an diesen unbounded_buffer Nachrichtenblock. Sie wird von der send Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
unterstützt_anonyme_Quelle Überschreibt die supports_anonymous_source Methode, um anzugeben, dass dieser Block Nachrichten akzeptieren kann, die von einer Quelle angeboten werden, die nicht verknüpft ist. (Überschreibt ITarget::supports_anonymous_source.)

Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".

Vererbungshierarchie

ISource

ITarget

source_block

Propagator-Block

unbounded_buffer

Anforderungen

Header: agents.h

Namespace: Parallelität

Nachricht_annehmen

Akzeptiert eine Nachricht, die von diesem unbounded_buffer Nachrichtenblock angeboten wurde, und überträgt den Besitz an den Anrufer.

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

Parameter

_MsgId
Das runtime_object_identity angebotene message Objekt.

Rückgabewert

Ein Zeiger auf das message Objekt, dessen Besitzer der Aufrufer jetzt ist.

Nachricht_verarbeiten

Eine zuvor vom unbounded_buffer Messaging-Block angebotene und vom Ziel reservierte Nachricht wird genutzt, um das Eigentum an den Anrufer zu übertragen.

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

Parameter

_MsgId
Das runtime_object_identity Objekt, das message verbraucht wird.

Rückgabewert

Ein Zeiger auf das message Objekt, dessen Besitzer der Aufrufer jetzt ist.

Hinweise

Ähnlich wie accept, wird jedoch immer von einem Aufruf von reserve gefolgt.

Aus der Warteschlange entfernen

Entfernt ein Element aus dem unbounded_buffer Nachrichtenblock.

_Type dequeue();

Rückgabewert

Die Nutzlast der Nachricht wurde aus der unbounded_buffer entfernt.

In die Warteschlange einreihen

Fügt dem unbounded_buffer Nachrichtenblock ein Element hinzu.

bool enqueue(
   _Type const&                 _Item
);

Parameter

_Artikel
Das hinzuzufügende Element.

Rückgabewert

true wenn das Element akzeptiert wurde, false andernfalls.

Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem unbounded_buffer Messagingblock verknüpft wurde.

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

Parameter

_PTarget
Ein Zeiger auf das neu verknüpfte Ziel.

Nachricht_verbreiten

Eine Nachricht wird asynchron von einem ISource Block an diesen unbounded_buffer Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.

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

Parameter

_PMessage
Ein Zeiger auf das message-Objekt.

_PSource
Ein Zeiger auf den Quellblock, der die Nachricht übermittelt.

Rückgabewert

Eine message_status-Angabe darüber, was das Ziel mit der Nachricht vorhat.

AusgabeNachrichtenÜbertragen

Platziert den message_PMessage in diesem unbounded_buffer Nachrichtenblock und versucht, ihn allen verknüpften Zielen anzubieten.

virtual void propagate_output_messages();

Hinweise

Wenn eine andere Nachricht dieser Nachricht im unbounded_buffer Vorausgeht, erfolgt die Propagation zu verknüpften Zielen erst dann, wenn frühere Nachrichten akzeptiert oder konsumiert wurden. Sobald das erste verknüpfte Ziel die Nachricht erfolgreich accept oder consume, übernimmt es den Besitz, und kein anderes Ziel kann die Nachricht empfangen.

VerarbeiteEingabemeldungen

Platziert die message_PMessage in diesem unbounded_buffer-Nachrichtenblock und versucht, sie allen verbundenen Zielen anzubieten.

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

Parameter

_PMessage
Ein Zeiger auf die Nachricht, die verarbeitet werden soll.

Freigabebenachrichtigung

Veröffentlicht eine vorherige Nachrichtenreservierung.

virtual void release_message(
   runtime_object_identity                 _MsgId
);

Parameter

_MsgId
Das runtime_object_identity des message Objekts, das freigegeben wird.

Reservierungsnachricht

Reserviert eine Nachricht, die zuvor von diesem unbounded_buffer Nachrichtenblock angeboten wurde.

virtual bool reserve_message(
   runtime_object_identity                 _MsgId
);

Parameter

_MsgId
Das runtime_object_identity Objekt, das message reserviert wird.

Rückgabewert

true wenn die Nachricht erfolgreich reserviert wurde, false andernfalls.

Hinweise

Nachdem reserve aufgerufen wurde, wenn true zurückgegeben wird, müssen entweder consume oder release aufgerufen werden, um den Besitz der Nachricht entweder zu übernehmen oder freizugeben.

resume_propagation

Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde.

virtual void resume_propagation();

Nachricht_senden

Übergibt eine Nachricht synchron von einem ISource Block an diesen unbounded_buffer Nachrichtenblock. Sie wird von der send Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.

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

Parameter

_PMessage
Ein Zeiger auf das message-Objekt.

_PSource
Ein Zeiger auf den Quellblock, der die Nachricht übermittelt.

Rückgabewert

Eine message_status-Angabe darüber, was das Ziel mit der Nachricht vorhat.

supports_anonymous_source

Überschreibt die supports_anonymous_source Methode, um anzugeben, dass dieser Block Nachrichten akzeptieren kann, die von einer Quelle angeboten werden, die nicht verknüpft ist.

virtual bool supports_anonymous_source();

Rückgabewert

true da der Block die angebotenen Nachrichten nicht verschiebt.

unbegrenzter Puffer

Erstellt einen unbounded_buffer Nachrichtenblock.

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

Parameter

_Filter
Eine Filterfunktion, die bestimmt, ob angebotene Nachrichten akzeptiert werden sollen.

_PScheduler
Das Scheduler -Objekt, in dem die Weiterleitungsaufgabe für den unbounded_buffer -Meldungsblock geplant ist.

_PScheduleGroup
Das ScheduleGroup -Objekt, in dem die Weiterleitungsaufgabe für den unbounded_buffer -Meldungsblock geplant ist. Das verwendete Scheduler -Objekt wird von der Planungsgruppe impliziert.

Hinweise

Die Runtime verwendet das Standardplanungsprogramm, wenn Sie den _PScheduler -Parameter oder den _PScheduleGroup -Parameter nicht angeben.

Der Typ filter_method ist ein Functor mit Signatur bool (_Type const &) , der von diesem unbounded_buffer Messagingblock aufgerufen wird, um zu bestimmen, ob eine angebotene Nachricht akzeptiert werden soll.

~grenzenloser_Puffer

Zerstört den unbounded_buffer Nachrichtenblock.

~unbounded_buffer();

Siehe auch

Concurrency-Namespace
overwrite_buffer-Klasse
single_assignment-Klasse