Share via


overwrite_buffer-klasse

Een overwrite_buffer berichtenblok is een multi-target, multi-source en geordend propagator_block dat in staat is om één bericht tegelijk op te slaan. Nieuwe berichten overschrijven eerder bewaarde berichten.

Syntaxis

template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Parameterwaarden

T
Het nettoladingtype van de berichten die zijn opgeslagen en doorgegeven door de buffer.

Leden

Openbare constructors

Naam Description
overwrite_buffer Overbelast. Er wordt een overwrite_buffer berichtenblok geconstrueerd.
~overwrite_buffer Destructor Vernietigt het overwrite_buffer berichtenblok.

Openbare methoden

Naam Description
has_value Controleert of dit overwrite_buffer berichtenblok nog een waarde heeft.
value Hiermee wordt een verwijzing opgehaald naar de huidige nettolading van het bericht dat wordt opgeslagen in het overwrite_buffer berichtenblok.

Beveiligde methoden

Naam Description
accept_message Accepteert een bericht dat door dit overwrite_buffer berichtenblok is aangeboden en retourneert een kopie van het bericht aan de beller.
consume_message Consumeert een bericht dat eerder door het overwrite_buffer berichtenblok is aangeboden en gereserveerd door de ontvanger, en retourneert een kopie van het bericht aan de beller.
link_doelmelding Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit overwrite_buffer berichtenblok.
propagate_message Asynchroon geeft een bericht van een ISource blok door aan dit overwrite_buffer berichtenblok. Deze wordt aangeroepen door de propagate methode, wanneer deze wordt aangeroepen door een bronblok.
doorgeven_aan_alle_doelen Plaatst het message _PMessage in dit overwrite_buffer berichtblok en biedt het aan alle gekoppelde doelwitten aan.
release_message Maakt een eerdere reservering van een bericht vrij. (Overschrijft source_block::release_message.)
reserve_message Reserveert een bericht dat eerder door dit overwrite_buffer berichtenblok is aangeboden. (Overschrijft source_block::reserve_message.)
resume_propagation De voortzetting wordt hervat nadat een reservering is vrijgegeven. (Overschrijft source_block::resume_propagation.)
send_message Hiermee wordt een bericht synchroon doorgegeven van een ISource blok aan dit overwrite_buffer berichtenblok. Deze wordt aangeroepen door de send methode, wanneer deze wordt aangeroepen door een bronblok.
ondersteunt_anonieme_bron Overschrijft de supports_anonymous_source methode om aan te geven dat dit blok berichten kan accepteren die worden aangeboden door een bron die niet is gekoppeld. (Overschrijft ITarget::supports_anonymous_source.)

Opmerkingen

Een overwrite_buffer berichtenblok geeft kopieën van het opgeslagen bericht door aan elk van de doelen.

Zie Asynchrone berichtblokken voor meer informatie.

Overnamehiërarchie

ISource

ITarget

source_block

propagator_block

overwrite_buffer

Requirements

Header: agents.h

Naamruimte: concurrentie

accepteer_bericht

Accepteert een bericht dat door dit overwrite_buffer berichtenblok is aangeboden en retourneert een kopie van het bericht aan de beller.

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

Parameterwaarden

_MsgId
Het runtime_object_identity van het aangeboden message object.

Retourwaarde

Een aanwijzer naar het message object waarvan de aanroeper nu eigenaar is.

Opmerkingen

Het overwrite_buffer berichtenblok retourneert kopieën van het bericht naar de doelen ervan, in plaats van het eigendom van het bericht dat momenteel wordt bewaard, over te dragen.

consume_message

Consumeert een bericht dat eerder door het overwrite_buffer berichtenblok is aangeboden en gereserveerd door de ontvanger, en retourneert een kopie van het bericht aan de beller.

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

Parameterwaarden

_MsgId
Het runtime_object_identity van het message-object dat wordt gebruikt.

Retourwaarde

Een aanwijzer naar het message object waarvan de aanroeper nu eigenaar is.

Opmerkingen

Vergelijkbaar met accept, maar wordt altijd voorafgegaan door een aanroep naar reserve.

heeft_waarde

Controleert of dit overwrite_buffer berichtenblok nog een waarde heeft.

bool has_value() const;

Retourwaarde

true als het blok een waarde heeft ontvangen, false anders.

Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit overwrite_buffer berichtenblok.

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

Parameterwaarden

_PTarget
Een aanwijzer naar het nieuw gekoppelde doel.

~overwrite_buffer

Vernietigt het overwrite_buffer berichtenblok.

~overwrite_buffer();

overwrite_buffer

Er wordt een overwrite_buffer berichtenblok geconstrueerd.

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

Parameterwaarden

_Filter
Een filterfunctie die bepaalt of aangeboden berichten moeten worden geaccepteerd.

_PScheduler
Het Scheduler-object waarin de doorgiftetaak voor het berichtblok overwrite_buffer is gepland.

_PScheduleGroup
Het ScheduleGroup-object waarin de doorgiftetaak voor het berichtblok overwrite_buffer is gepland. Het gebruikte Scheduler-object wordt geïmpliceerd door de planningsgroep.

Opmerkingen

De runtime gebruikt de standaardplanner als u de _PScheduler of _PScheduleGroup parameters niet opgeeft.

Het type filter_method is een functor met handtekening bool (T const &) die wordt aangeroepen door dit overwrite_buffer berichtenblok om te bepalen of het een aangeboden bericht moet accepteren.

propagate_message

Asynchroon geeft een bericht van een ISource blok door aan dit overwrite_buffer berichtenblok. Deze wordt aangeroepen door de propagate methode, wanneer deze wordt aangeroepen door een bronblok.

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

Parameterwaarden

_PMessage
Een aanwijzer naar het message object.

_PSource
Een aanwijzer naar het bronblok dat het bericht aanbiedt.

Retourwaarde

Een message_status indicatie van wat het doel heeft besloten te doen met het bericht.

propageren_naar_alle_doelen

Plaatst het message _PMessage in dit overwrite_buffer berichtblok en biedt het aan alle gekoppelde doelwitten aan.

virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);

Parameterwaarden

_PMessage
Een aanwijzer naar een message object waarvan deze overwrite_buffer eigenaar is geworden.

Opmerkingen

Met deze methode wordt het huidige bericht in het overwrite_buffer bericht overschreven met het zojuist geaccepteerde bericht _PMessage.

bericht_verzenden

Hiermee wordt een bericht synchroon doorgegeven van een ISource blok aan dit overwrite_buffer berichtenblok. Deze wordt aangeroepen door de send methode, wanneer deze wordt aangeroepen door een bronblok.

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

Parameterwaarden

_PMessage
Een aanwijzer naar het message object.

_PSource
Een aanwijzer naar het bronblok dat het bericht aanbiedt.

Retourwaarde

Een message_status indicatie van wat het doel heeft besloten te doen met het bericht.

ondersteunt_anonieme_bron

Overschrijft de supports_anonymous_source methode om aan te geven dat dit blok berichten kan accepteren die worden aangeboden door een bron die niet is gekoppeld.

virtual bool supports_anonymous_source();

Retourwaarde

true omdat het blok aangeboden berichten niet uitstelt.

releasemededeling

Maakt een eerdere reservering van een bericht vrij.

virtual void release_message(runtime_object_identity _MsgId);

Parameterwaarden

_MsgId
Het runtime_object_identity object message dat wordt vrijgegeven.

reserve_message

Reserveert een bericht dat eerder door dit overwrite_buffer berichtenblok is aangeboden.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parameterwaarden

_MsgId
runtime_object_identity van het message object dat wordt gereserveerd.

Retourwaarde

true als het bericht succesvol is gereserveerd, false anders.

Opmerkingen

Nadat reserve is aangeroepen en true wordt geretourneerd, moet ofwel consume of release worden aangeroepen om het eigendom van het bericht over te nemen of vrij te geven.

resume_propagation

De voortzetting wordt hervat nadat een reservering is vrijgegeven.

virtual void resume_propagation();

waarde

Hiermee wordt een verwijzing opgehaald naar de huidige nettolading van het bericht dat wordt opgeslagen in het overwrite_buffer berichtenblok.

T value();

Retourwaarde

De payload van het bericht dat momenteel is opgeslagen.

Opmerkingen

De waarde die in de overwrite_buffer methode is opgeslagen, kan direct worden gewijzigd nadat deze methode is geretourneerd. Met deze methode wordt gewacht totdat een bericht binnenkomt als er momenteel geen bericht is opgeslagen in de overwrite_buffer.

Zie ook

concurrentie Namespace
De unbounded_buffer-klasse
single_assignment-klasse