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 single_assignment berichtenblok is een multi-doelen, multi-bronnen, geordend propagator_block dat in staat is om een enkele, eenmalig beschrijfbare message op te slaan.
Syntaxis
template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Parameterwaarden
T
Het payloadtype van het bericht dat wordt opgeslagen en doorgegeven door de buffer.
Leden
Openbare constructors
| Naam | Description |
|---|---|
| single_assignment | Overbelast. Maakt een single_assignment berichtenblok. |
| ~single_assignment Destructor | Vernietigt het single_assignment berichtenblok. |
Openbare methoden
| Naam | Description |
|---|---|
| has_value | Controleert of dit single_assignment berichtenblok al is geïnitialiseerd met een waarde. |
| value | Hiermee wordt een verwijzing opgehaald naar de huidige nettolading van het bericht dat wordt opgeslagen in het single_assignment berichtenblok. |
Beveiligde methoden
| Naam | Description |
|---|---|
| accept_message | Accepteert een bericht dat door dit single_assignment berichtenblok is aangeboden en retourneert een kopie van het bericht aan de beller. |
| consume_message | Gebruikt een bericht dat eerder door single_assignment is aangeboden en door de bestemming gereserveerd, 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 single_assignment berichtenblok. |
| propagate_message | Asynchroon geeft een bericht van een ISource blok door aan dit single_assignment 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 single_assignment 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 single_assignment 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 single_assignment berichtenblok. Deze wordt aangeroepen door de send methode, wanneer deze wordt aangeroepen door een bronblok. |
Opmerkingen
Een single_assignment berichtenblok verzendt kopieën van het bericht door naar elk doel.
Zie Asynchrone berichtblokken voor meer informatie.
Overnamehiërarchie
single_assignment
Requirements
Header: agents.h
Naamruimte: concurrentie
accepteer_bericht
Accepteert een bericht dat door dit single_assignment 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 single_assignment 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
Gebruikt een bericht dat eerder door single_assignment is aangeboden en door de bestemming gereserveerd, 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 single_assignment berichtenblok al is geïnitialiseerd met een waarde.
bool has_value() const;
Retourwaarde
true als het blok een waarde heeft ontvangen, false anders.
link_doel_melding
Een callback waarmee wordt aangegeven dat een nieuw doel is gekoppeld aan dit single_assignment berichtenblok.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar het nieuw gekoppelde doel.
propagate_message
Asynchroon geeft een bericht van een ISource blok door aan dit single_assignment 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 berichtblok in dit single_assignment berichtblok en biedt dit aan alle gekoppelde doelen.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Parameterwaarden
_PMessage
Een aanwijzer naar een message bericht waarvan dit single_assignment berichtenblok eigenaar is geworden.
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 single_assignment 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 single_assignment 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.
enkelvoudige_toewijzing
Maakt een single_assignment berichtenblok.
single_assignment();
single_assignment(
filter_method const& _Filter);
single_assignment(
Scheduler& _PScheduler);
single_assignment(
Scheduler& _PScheduler,
filter_method const& _Filter);
single_assignment(
ScheduleGroup& _PScheduleGroup);
single_assignment(
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 single_assignment is gepland.
_PScheduleGroup
Het ScheduleGroup-object waarin de doorgiftetaak voor het berichtblok single_assignment 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 single_assignment berichtenblok om te bepalen of het een aangeboden bericht moet accepteren.
~single_assignment
Vernietigt het single_assignment berichtenblok.
~single_assignment();
waarde
Hiermee wordt een verwijzing opgehaald naar de huidige nettolading van het bericht dat wordt opgeslagen in het single_assignment berichtenblok.
T const& value();
Retourwaarde
De payload van het opgeslagen bericht.
Opmerkingen
Met deze methode wordt gewacht totdat een bericht binnenkomt als er momenteel geen bericht is opgeslagen in het single_assignment berichtenblok.
Zie ook
concurrentie Namespace
overwrite_buffer-klasse
De unbounded_buffer-klasse