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 choice berichtenblok is een blok met meerdere bronnen en één doel dat een besturingsstroominteractie met een set bronnen vertegenwoordigt. Het keuzeblok wacht tot een van de meerdere bronnen een bericht produceert en geeft de index door van de bron die het bericht heeft geproduceerd.
Syntaxis
template<
class T
>
class choice: public ISource<size_t>;
Parameterwaarden
T
Een tuple-gebaseerd type dat de ladingen van de invoerbronnen vormt.
Leden
Openbare typedefs
| Naam | Description |
|---|---|
type |
Een typealias voor T. |
Openbare constructors
| Naam | Description |
|---|---|
| choice | Overbelast. Maakt een choice berichtenblok. |
| ~choice-destructor | Vernietigt het choice berichtenblok. |
Openbare methoden
| Naam | Description |
|---|---|
| accepteren | Accepteert een bericht dat door dit choice blok is aangeboden, waardoor het eigendom wordt overgedragen aan de beller. |
| acquire_ref | Hiermee verkrijgt u een verwijzingsaantal op dit choice berichtenblok om verwijdering te voorkomen. |
| verbruiken | Gebruikt een bericht dat eerder door dit choice berichtenblok is aangeboden en succesvol is gereserveerd door het doelwit, en draagt het eigendom over aan de beller. |
| has_value | Controleert of dit choice berichtenblok al is geïnitialiseerd met een waarde. |
| index | Retourneert een index naar het tuple, dat staat voor het element dat door het choice messaging block is geselecteerd. |
| link_target | Hiermee koppelt u een doelblok aan dit choice berichtenblok. |
| release | Intrekt een vorige succesvolle berichtreservering. |
| release_ref | Hiermee wordt een referentieaantal uitgebracht voor dit choice berichtenblok. |
| Reserve | Reserveert een bericht dat eerder door dit choice berichtenblok is aangeboden. |
| doel ontkoppelen | Hiermee ontkoppelt u een doelblok van dit choice berichtenblok. |
| unlink_targets | Hiermee ontkoppelt u alle doelen uit dit choice berichtenblok. (Overschrijft ISource::unlink_targets.) |
| value | Hiermee wordt het bericht opgehaald waarvan de index is geselecteerd door het choice berichtenblok. |
Opmerkingen
Het keuzeblok zorgt ervoor dat slechts één van de binnenkomende berichten wordt gebruikt.
Zie Asynchrone berichtblokken voor meer informatie.
Overnamehiërarchie
choice
Requirements
Header: agents.h
Naamruimte: concurrentie
accepteren
Accepteert een bericht dat door dit choice blok is aangeboden, waardoor het eigendom wordt overgedragen aan de beller.
virtual message<size_t>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity van het aangeboden message object.
_PTarget
Een aanwijzer naar het doelblok dat de accept methode aanroept.
Retourwaarde
Een aanwijzer naar het bericht waarvan de beller nu eigenaar is.
acquire_ref
Hiermee verkrijgt u een verwijzingsaantal op dit choice berichtenblok om verwijdering te voorkomen.
virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar het doelblok dat deze methode aanroept.
Opmerkingen
Deze methode wordt aangeroepen door een ITarget object dat tijdens de link_target methode aan deze bron wordt gekoppeld.
choice
Maakt een choice berichtenblok.
explicit choice(
T _Tuple);
choice(
Scheduler& _PScheduler,
T _Tuple);
choice(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
choice(
choice&& _Choice);
Parameterwaarden
_Tupel
Een tuple bron voor de keuze.
_PScheduler
Het Scheduler-object waarin de doorgiftetaak voor het berichtblok choice is gepland.
_PScheduleGroup
Het ScheduleGroup-object waarin de doorgiftetaak voor het berichtblok choice is gepland. Het gebruikte Scheduler-object wordt geïmpliceerd door de planningsgroep.
_Keuze
Een choice berichtenblok waaruit moet worden gekopieerd. Houd er rekening mee dat het oorspronkelijke object verweesd is, waardoor dit een verplaatsingsconstructor is.
Opmerkingen
De runtime gebruikt de standaardplanner als u de _PScheduler of _PScheduleGroup parameters niet opgeeft.
Verplaatsingsconstructie wordt niet uitgevoerd onder een slot, wat betekent dat het aan de gebruiker is om ervoor te zorgen dat er geen lichte taken in de vlucht zijn op het moment van verplaatsen. Anders kunnen er talloze races plaatsvinden, wat leidt tot uitzonderingen of inconsistente status.
~Keuze
Vernietigt het choice berichtenblok.
~choice();
Verbruiken
Gebruikt een bericht dat eerder door dit choice berichtenblok is aangeboden en succesvol is gereserveerd door het doelwit, en draagt het eigendom over aan de beller.
virtual message<size_t>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity van het gereserveerde message-object.
_PTarget
Een aanwijzer naar het doelblok dat de consume methode aanroept.
Retourwaarde
Een aanwijzer naar het message object waarvan de aanroeper nu eigenaar is.
Opmerkingen
De consume methode is vergelijkbaar met accept, maar moet altijd worden voorafgegaan door een aanroep van reserve die true retourneerde.
heeft_waarde
Controleert of dit choice berichtenblok al is geïnitialiseerd met een waarde.
bool has_value() const;
Retourwaarde
true als het blok een waarde heeft ontvangen, false anders.
index
Retourneert een index naar het tuple, dat staat voor het element dat door het choice messaging block is geselecteerd.
size_t index();
Retourwaarde
De berichtindex.
Opmerkingen
De nettolading van het bericht kan worden geëxtraheerd met behulp van de get methode.
link_target
Hiermee koppelt u een doelblok aan dit choice berichtenblok.
virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar een ITarget blok om een koppeling naar dit choice berichtenblok te maken.
vrijgave
Intrekt een vorige succesvolle berichtreservering.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_MsgId
Het runtime_object_identity object message dat wordt vrijgegeven.
_PTarget
Een aanwijzer naar het doelblok dat de release methode aanroept.
release_ref
Hiermee wordt een referentieaantal uitgebracht voor dit choice berichtenblok.
virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar het doelblok dat deze methode aanroept.
Opmerkingen
Deze methode wordt aangeroepen door een ITarget object dat niet is gekoppeld vanuit deze bron. Het bronblok mag alle resources vrijgeven die zijn gereserveerd voor het doelblok.
reserve
Reserveert een bericht dat eerder door dit choice berichtenblok is aangeboden.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_MsgId
runtime_object_identity van het message object dat wordt gereserveerd.
_PTarget
Een aanwijzer naar het doelblok dat de reserve methode aanroept.
Retourwaarde
true als het bericht succesvol is gereserveerd, false anders. Reserveringen kunnen om verschillende redenen mislukken, waaronder: het bericht is al gereserveerd of geaccepteerd door een ander doel, de bron kan reserveringen weigeren, enzovoort.
Opmerkingen
Nadat u hebt gebeld reserve, moet u, als het lukt, bellen consume of release om respectievelijk het bericht in te nemen of op te geven.
unlink_target
Hiermee ontkoppelt u een doelblok van dit choice berichtenblok.
virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);
Parameterwaarden
_PTarget
Een aanwijzer naar een ITarget blok om de koppeling van dit choice berichtenblok op te heffen.
ontkoppel_doelen
Hiermee ontkoppelt u alle doelen uit dit choice berichtenblok.
virtual void unlink_targets();
Opmerkingen
Deze methode hoeft niet te worden aangeroepen vanuit de destructor omdat de destructor het interne single_assignment blok correct zal ontkoppelen.
waarde
Hiermee wordt het bericht opgehaald waarvan de index is geselecteerd door het choice berichtenblok.
template <
typename _Payload_type
>
_Payload_type const& value();
Parameterwaarden
_Payload_type
Het type nettolading van het bericht.
Retourwaarde
De payload van het bericht.
Opmerkingen
Omdat een choice berichtenblok invoer kan aannemen met verschillende nettoladingtypen, moet u het type nettolading opgeven op het moment van ophalen. U kunt het type bepalen op basis van het resultaat van de index methode.
Zie ook
concurrentie Namespace
deelnemen aan les
single_assignment-klasse