Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein overwrite_buffer-Meldungsblock ist ein geordneter propagator_block mit mehreren Zielen und mehreren Quellen, der jeweils eine einzelne Meldung speichern kann. Neue Meldungen überschreiben zuvor Gespeicherte.
Syntax
template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Parameter
T
Der Nutzlasttyp der vom Puffer gespeicherten und weitergegebenen Nachrichten.
Mitglieder
Öffentliche Konstruktoren
| Name | Beschreibung |
|---|---|
| overwrite_buffer | Überladen. Erstellt einen overwrite_buffer Nachrichtenblock. |
| ~overwrite_buffer Destruktor | Zerstört den overwrite_buffer Nachrichtenblock. |
Öffentliche Methoden
| Name | Beschreibung |
|---|---|
| has_value | Überprüft, ob dieser overwrite_buffer Nachrichtenblock noch einen Wert aufweist. |
| value | Ruft einen Verweis auf die aktuelle Nutzlast der Nachricht ab, die im overwrite_buffer Nachrichtenblock gespeichert wird. |
Geschützte Methoden
| Name | Beschreibung |
|---|---|
| nachricht_akzeptieren | Akzeptiert eine Nachricht, die von diesem overwrite_buffer Nachrichtenblock angeboten wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück. |
| consume_message | Verbraucht eine Nachricht, die overwrite_buffer zuvor vom Nachrichtenblock bereitgestellt und vom Ziel reserviert wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück. |
| link_target_notification | Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem overwrite_buffer Messagingblock verknüpft wurde. |
| propagate_message | Eine Nachricht wird asynchron von einem ISource Block an diesen overwrite_buffer Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird. |
| auf_beliebige_Ziele_übertragen | Platziert den message _PMessage in diesem overwrite_buffer Nachrichtenblock und bietet ihn allen verknüpften Zielen an. |
| release_message | Veröffentlicht eine vorherige Nachrichtenreservierung. (Überschreibt source_block::release_message.) |
| reserve_message | Reserviert eine Nachricht, die zuvor von diesem overwrite_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 overwrite_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.) |
Hinweise
Ein overwrite_buffer Nachrichtenblock verteilt Kopien seiner gespeicherten Nachricht an jedes seiner Ziele.
Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".
Vererbungshierarchie
overwrite_buffer
Anforderungen
Header: agents.h
Namespace: Parallelität
Nachricht_annehmen
Akzeptiert eine Nachricht, die von diesem overwrite_buffer Nachrichtenblock angeboten wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück.
virtual message<T>* 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.
Hinweise
Der overwrite_buffer Nachrichtenblock gibt Kopien der Nachricht an seine Ziele zurück, anstatt den Besitz der aktuell gehaltenen Nachricht zu übertragen.
Nachricht_verarbeiten
Verbraucht eine Nachricht, die overwrite_buffer zuvor vom Nachrichtenblock bereitgestellt und vom Ziel reserviert wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück.
virtual message<T>* 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.
hat_Wert
Überprüft, ob dieser overwrite_buffer Nachrichtenblock noch einen Wert aufweist.
bool has_value() const;
Rückgabewert
true wenn der Block einen Wert erhalten hat, false andernfalls.
link_target_notification
Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem overwrite_buffer Messagingblock verknüpft wurde.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Parameter
_PTarget
Ein Zeiger auf das neu verknüpfte Ziel.
~overwrite_buffer
Zerstört den overwrite_buffer Nachrichtenblock.
~overwrite_buffer();
Überschreibpuffer
Erstellt einen overwrite_buffer Nachrichtenblock.
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);
Parameter
_Filter
Eine Filterfunktion, die bestimmt, ob angebotene Nachrichten akzeptiert werden sollen.
_PScheduler
Das Scheduler -Objekt, in dem die Weiterleitungsaufgabe für den overwrite_buffer -Meldungsblock geplant ist.
_PScheduleGroup
Das ScheduleGroup -Objekt, in dem die Weiterleitungsaufgabe für den overwrite_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 (T const &) , der von diesem overwrite_buffer Messagingblock aufgerufen wird, um zu bestimmen, ob eine angebotene Nachricht akzeptiert werden soll.
Nachricht_verbreiten
Eine Nachricht wird asynchron von einem ISource Block an diesen overwrite_buffer Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _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.
an beliebige Ziele weiterleiten
Platziert den message _PMessage in diesem overwrite_buffer Nachrichtenblock und bietet ihn allen verknüpften Zielen an.
virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);
Parameter
_PMessage
Ein Zeiger auf ein message Objekt, dessen Besitz dies overwrite_buffer übernommen hat.
Hinweise
Diese Methode überschreibt die aktuelle Nachricht in der overwrite_buffer mit der neu angenommenen Nachricht _PMessage.
Nachricht_senden
Übergibt eine Nachricht synchron von einem ISource Block an diesen overwrite_buffer Nachrichtenblock. Sie wird von der send Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _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.
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 overwrite_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();
Wert
Ruft einen Verweis auf die aktuelle Nutzlast der Nachricht ab, die im overwrite_buffer Nachrichtenblock gespeichert wird.
T value();
Rückgabewert
Die Nutzlast der aktuell gespeicherten Nachricht.
Hinweise
Der im overwrite_buffer gespeicherte Wert kann sich unmittelbar nach dem Beenden dieser Methode ändern. Diese Methode wartet auf das Eintreffen einer Nachricht, sofern keine Nachricht in der overwrite_buffer gespeichert ist.
Siehe auch
Concurrency-Namespace
UnboundedBuffer-Klasse
single_assignment-Klasse