Share via


keuzeklasse

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

ISource

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.

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.

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.

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