Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Een unbounded_buffer berichtenblok is een multidoelgericht, multibron, geordend propagator_block dat in staat is om een onbegrensd aantal berichten op te slaan.
Syntaxis
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
Parameterwaarden
_Type
Het nettoladingtype van de berichten die zijn opgeslagen en doorgegeven door de buffer.
Leden
Openbare constructors
| Naam | Description |
|---|---|
| unbounded_buffer | Overbelast. Er wordt een unbounded_buffer berichtenblok geconstrueerd. |
| ~unbounded_buffer Destructor | Vernietigt het unbounded_buffer berichtenblok. |
Openbare methoden
| Naam | Description |
|---|---|
| dequeue | Hiermee verwijdert u een item uit het unbounded_buffer berichtenblok. |
| enqueue | Voegt een item toe aan het unbounded_buffer berichtenblok. |
Beveiligde methoden
| Naam | Description |
|---|---|
| accept_message | Accepteert een bericht dat door dit unbounded_buffer berichtenblok is aangeboden, waardoor het eigendom wordt overgedragen aan de beller. |
| consume_message | Verbruikt een bericht dat eerder is aangeboden door het unbounded_buffer berichtenblok en gereserveerd door het doelwit, waarbij de eigendom wordt overgedragen aan de aanroeper. |
| link_doelmelding | Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit unbounded_buffer berichtenblok. |
| process_input_messages | Plaatst het message_PMessage berichtblok in dit unbounded_buffer berichtblok en probeert het aan te bieden aan alle gekoppelde doelen. |
| propagate_message | Asynchroon geeft een bericht van een ISource blok door aan dit unbounded_buffer berichtenblok. Deze wordt aangeroepen door de propagate methode, wanneer deze wordt aangeroepen door een bronblok. |
| propagate_output_messages | Plaatst het message_PMessage berichtblok in dit unbounded_buffer berichtblok en probeert het aan te bieden aan alle gekoppelde doelen. (Overschrijft source_block::propagate_output_messages.) |
| release_message | Maakt een eerdere reservering van een bericht vrij. (Overschrijft source_block::release_message.) |
| reserve_message | Reserveert een bericht dat eerder door dit unbounded_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 unbounded_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.) |
Zie Asynchrone berichtblokken voor meer informatie.
Overnamehiërarchie
unbounded_buffer
Requirements
Header: agents.h
Naamruimte: concurrentie
accepteer_bericht
Accepteert een bericht dat door dit unbounded_buffer berichtenblok is aangeboden, waardoor het eigendom wordt overgedragen aan de beller.
virtual message<_Type> * 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.
consume_message
Verbruikt een bericht dat eerder is aangeboden door het unbounded_buffer berichtenblok en gereserveerd door het doelwit, waarbij de eigendom wordt overgedragen aan de aanroeper.
virtual message<_Type> * 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.
uit de rij verwijderen
Hiermee verwijdert u een item uit het unbounded_buffer berichtenblok.
_Type dequeue();
Retourwaarde
De inhoud van het bericht verwijderd van het unbounded_buffer.
enqueue
Voegt een item toe aan het unbounded_buffer berichtenblok.
bool enqueue(
_Type const& _Item
);
Parameterwaarden
_Item
Het item dat moet worden toegevoegd.
Retourwaarde
true als het item is geaccepteerd, false anders.
link_doel_melding
Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit unbounded_buffer berichtenblok.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
Parameterwaarden
_PTarget
Een aanwijzer naar het nieuw gekoppelde doel.
propagate_message
Asynchroon geeft een bericht van een ISource blok door aan dit unbounded_buffer berichtenblok. Deze wordt aangeroepen door de propagate methode, wanneer deze wordt aangeroepen door een bronblok.
virtual message_status propagate_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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.
output_berichten_doorgeven
Plaatst het message_PMessage berichtblok in dit unbounded_buffer berichtblok en probeert het aan te bieden aan alle gekoppelde doelen.
virtual void propagate_output_messages();
Opmerkingen
Als er al een ander bericht vóór dit bericht staat in het unbounded_buffer, zal de doorgifte naar de gekoppelde doelen pas plaatsvinden wanneer eerdere berichten zijn geaccepteerd of verwerkt. Het eerste gekoppelde doel dat erin slaagt om accept of consume met het bericht, neemt het eigendom, en geen ander doel kan dan het bericht overnemen.
verwerk_invoersberichten
Plaatst het message_PMessage berichtblok in dit unbounded_buffer berichtblok en probeert het aan te bieden aan alle gekoppelde doelen.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Parameterwaarden
_PMessage
Een aanwijzer naar het bericht dat moet worden verwerkt.
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 unbounded_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();
bericht_verzenden
Hiermee wordt een bericht synchroon doorgegeven van een ISource blok aan dit unbounded_buffer berichtenblok. Deze wordt aangeroepen door de send methode, wanneer deze wordt aangeroepen door een bronblok.
virtual message_status send_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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.
onbegrensde buffer
Er wordt een unbounded_buffer berichtenblok geconstrueerd.
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
);
Parameterwaarden
_Filter
Een filterfunctie die bepaalt of aangeboden berichten moeten worden geaccepteerd.
_PScheduler
Het Scheduler-object waarin de doorgiftetaak voor het berichtblok unbounded_buffer is gepland.
_PScheduleGroup
Het ScheduleGroup-object waarin de doorgiftetaak voor het berichtblok unbounded_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 (_Type const &) die wordt aangeroepen door dit unbounded_buffer berichtenblok om te bepalen of het een aangeboden bericht moet accepteren.
~unbounded_buffer
Vernietigt het unbounded_buffer berichtenblok.
~unbounded_buffer();
Zie ook
concurrentie Namespace
overwrite_buffer-klasse
single_assignment-klasse