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
_Art
Der Nutzlasttyp der vom Puffer gespeicherten und weitergegebenen Nachrichten.
Member
Ö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 | Entfernt ein Element aus dem unbounded_buffer Nachrichtenblock. |
einreihen | Fügt dem unbounded_buffer Nachrichtenblock ein Element hinzu. |
Geschützte Methoden
Name | Beschreibung |
---|---|
accept_message | Akzeptiert eine Nachricht, die von diesem unbounded_buffer Nachrichtenblock angeboten wurde, und überträgt den Besitz an den Anrufer. |
consume_message | Nutzt eine Nachricht, die unbounded_buffer zuvor vom Messaging-Block angeboten und vom Ziel reserviert wurde und den Besitz an den Anrufer überträgt. |
link_target_notification | Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem unbounded_buffer Messagingblock verknüpft wurde. |
process_input_messages | Platziert den message _PMessage Nachrichtenblock in diesem unbounded_buffer Nachrichtenblock und versucht, ihn allen verknüpften 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 den message _PMessage Nachrichtenblock in diesem unbounded_buffer Nachrichtenblock und versucht, ihn allen verknüpften Zielen anzubieten. (Überschreibt source_block::p ropagate_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. |
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. (Außerkraftsetzungen ITarget::supports_anonymous_source.) |
Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".
Vererbungshierarchie
unbounded_buffer
Anforderungen
Header: agents.h
Namespace: Parallelität
accept_message
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.
consume_message
Nutzt eine Nachricht, die unbounded_buffer
zuvor vom Messaging-Block angeboten und vom Ziel reserviert wurde und den Besitz an den Anrufer überträgt.
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
, aber wird immer ein Aufruf von reserve
.
Aus der Warteschlange entfernen
Entfernt ein Element aus dem unbounded_buffer
Nachrichtenblock.
_Type dequeue();
Rückgabewert
Die Nutzlast der Nachricht, die aus der unbounded_buffer
.
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.
link_target_notification
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.
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.
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 anbietet.
Rückgabewert
Ein message_status Hinweis darauf, was das Ziel mit der Nachricht zu tun hat.
propagate_output_messages
Platziert den message
_PMessage
Nachrichtenblock in diesem unbounded_buffer
Nachrichtenblock und versucht, ihn allen verknüpften Zielen anzubieten.
virtual void propagate_output_messages();
Hinweise
Wenn eine andere Nachricht bereits vor dieser Nachricht liegt, erfolgt die unbounded_buffer
Weitergabe an verknüpfte Ziele erst dann, wenn frühere Nachrichten akzeptiert oder verbraucht wurden. Das erste verknüpfte Ziel erfolgreich accept
oder consume
die Nachricht übernimmt den Besitz, und dann kann kein anderes Ziel die Nachricht abrufen.
process_input_messages
Platziert den message
_PMessage
Nachrichtenblock in diesem unbounded_buffer
Nachrichtenblock und versucht, ihn allen verknüpften Zielen anzubieten.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Parameter
_PMessage
Ein Zeiger auf die Nachricht, die verarbeitet werden soll.
release_message
Veröffentlicht eine vorherige Nachrichtenreservierung.
virtual void release_message(
runtime_object_identity _MsgId
);
Parameter
_MsgId
Das runtime_object_identity
Objekt, das message
freigegeben wird.
reserve_message
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
Nach reserve
dem Aufruf, wenn er zurückgegeben true
wird, oder release
muss aufgerufen werden, consume
um entweder den Besitz der Nachricht zu übernehmen oder freizugeben.
resume_propagation
Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde.
virtual void 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.
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 anbietet.
Rückgabewert
Ein message_status Hinweis darauf, was das Ziel mit der Nachricht zu tun hat.
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.
unbounded_buffer
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.
~unbounded_buffer
Zerstört den unbounded_buffer
Nachrichtenblock.
~unbounded_buffer();
Siehe auch
Concurrency-Namespace
overwrite_buffer-Klasse
single_assignment-Klasse