Sdílet prostřednictvím


Třída choice

choice Blok zasílání zpráv je více zdrojový blok s jedním cílem, který představuje interakci toku řízení se sadou zdrojů. Blok voleb bude čekat, až některý z více zdrojů vytvoří zprávu a rozšíří index zdroje, který zprávu vytvořil.

Syntaxe

template<
    class T
>
class choice: public ISource<size_t>;

Parametry

T
Typ tuplezaložený na jazyce představující datové části vstupních zdrojů.

Členové

Veřejné definice typedef

Jméno popis
type Alias typu pro T.

Veřejné konstruktory

Jméno popis
Volba Přetíženo. choice Vytvoří blok zasílání zpráv.
~volba – destruktor choice Zničí blok zasílání zpráv.

Veřejné metody

Jméno popis
Přijmout Přijme zprávu, kterou tento choice blok nabízí, a přenese vlastnictví volajícímu.
acquire_ref Získá referenční počet na tento choice blok zasílání zpráv, aby se zabránilo odstranění.
Konzumovat Využívá zprávu, kterou dříve choice tento blok zasílání zpráv nabízí, a úspěšně rezervována cílem a převádí vlastnictví volajícímu.
has_value Zkontroluje, jestli se tento choice blok zasílání zpráv ještě inicializoval s hodnotou.
Index Vrátí index představující tuple prvek vybraný blokem choice zasílání zpráv.
link_target Pro propojení cílového bloku s tímto choice blokem zasílání zpráv.
Vydání Uvolní předchozí úspěšnou rezervaci zpráv.
release_ref Uvolní referenční počet na tento choice blok zasílání zpráv.
Rezervy Zarezervuje dříve nabízenou zprávu v tomto choice bloku zasílání zpráv.
unlink_target Zruší propojení cílového bloku s tímto choice blokem zasílání zpráv.
unlink_targets Zruší propojení všech cílů z tohoto choice bloku zasílání zpráv. (Přepsání ISource::unlink_targets.)
value Získá zprávu, jejíž index byl vybrán blokem choice zasílání zpráv.

Poznámky

Blok voleb zajišťuje, že se spotřebuje jenom jedna z příchozích zpráv.

Další informace naleznete v tématu Asynchronní bloky zpráv.

Hierarchie dědičnosti

ISource

choice

Požadavky

Hlavička: agents.h

Obor názvů: souběžnost

accept

Přijme zprávu, kterou tento choice blok nabízí, a přenese vlastnictví volajícímu.

virtual message<size_t>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametry

_MsgId
message Nabízený runtime_object_identity objekt.

_PTarget
Ukazatel na cílový blok, který volá metodu accept .

Vrácená hodnota

Ukazatel na zprávu, že volající teď má vlastnictví.

acquire_ref

Získá referenční počet na tento choice blok zasílání zpráv, aby se zabránilo odstranění.

virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);

Parametry

_PTarget
Ukazatel na cílový blok, který tuto metodu volá.

Poznámky

Tato metoda je volána objektem ITarget , který je propojen s tímto zdrojem během link_target metody.

volba

choice Vytvoří blok zasílání zpráv.

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

Parametry

_Tuple
A tuple zdroje pro výběr.

_PScheduler
Objekt Scheduler , ve kterém je naplánována úloha šíření bloku choice zasílání zpráv.

_PScheduleGroup
Objekt ScheduleGroup , ve kterém je naplánována úloha šíření bloku choice zasílání zpráv. Použitý Scheduler objekt je odvozen ze skupiny plánů.

_Volba
Blok choice zasílání zpráv, ze které se má kopírovat. Všimněte si, že původní objekt je osamocený, takže se jedná o konstruktor přesunutí.

Poznámky

Modul runtime používá výchozí plánovač, pokud nezadáte _PScheduler parametry._PScheduleGroup

Konstrukce přesunu se neprovádí pod zámkem, což znamená, že je na uživateli, aby se zajistilo, že v době pohybu nejsou žádné úkoly s lehkou hmotností. V opačném případě může dojít k mnoha rasám, což vede k výjimkám nebo nekonzistentnímu stavu.

~Volba

choice Zničí blok zasílání zpráv.

~choice();

consume

Využívá zprávu, kterou dříve choice tento blok zasílání zpráv nabízí, a úspěšně rezervována cílem a převádí vlastnictví volajícímu.

virtual message<size_t>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametry

_MsgId
Rezervovaný runtime_object_identitymessage objekt.

_PTarget
Ukazatel na cílový blok, který volá metodu consume .

Vrácená hodnota

Ukazatel na message objekt, ke kterému má volající nyní vlastnictví.

Poznámky

Metoda consume je podobná accept, ale musí být vždy před voláním reserve vráceného true.

has_value

Zkontroluje, jestli se tento choice blok zasílání zpráv ještě inicializoval s hodnotou.

bool has_value() const;

Vrácená hodnota

true pokud blok obdržel hodnotu, false jinak.

index

Vrátí index představující tuple prvek vybraný blokem choice zasílání zpráv.

size_t index();

Vrácená hodnota

Index zprávy.

Poznámky

Datovou část zprávy lze extrahovat pomocí get metody.

Pro propojení cílového bloku s tímto choice blokem zasílání zpráv.

virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);

Parametry

_PTarget
Ukazatel na blok pro propojení s tímto choice blokem ITarget zasílání zpráv.

Vydání

Uvolní předchozí úspěšnou rezervaci zpráv.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametry

_MsgId
Uvolnění runtime_object_identity objektu message .

_PTarget
Ukazatel na cílový blok, který volá metodu release .

release_ref

Uvolní referenční počet na tento choice blok zasílání zpráv.

virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);

Parametry

_PTarget
Ukazatel na cílový blok, který tuto metodu volá.

Poznámky

Tato metoda je volána ITarget objektem, který je odpojen od tohoto zdroje. Zdrojový blok může uvolnit všechny prostředky rezervované pro cílový blok.

Rezervy

Zarezervuje dříve nabízenou zprávu v tomto choice bloku zasílání zpráv.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametry

_MsgId
Objekt runtime_object_identity , který message je rezervován.

_PTarget
Ukazatel na cílový blok, který volá metodu reserve .

Vrácená hodnota

true pokud byla zpráva úspěšně rezervována, false jinak. Rezervace můžou selhat z mnoha důvodů, mezi které patří: zpráva už byla rezervována nebo přijata jiným cílem, zdroj mohl rezervace odepřít atd.

Poznámky

Jakmile zavoláte reserve, pokud bude úspěšné, musíte zavolat buď consume nebo release v zájmu převzetí nebo vzdání vlastnictví zprávy, v uvedeném pořadí.

Zruší propojení cílového bloku s tímto choice blokem zasílání zpráv.

virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);

Parametry

_PTarget
Ukazatel na blok pro ITarget zrušení propojení s tímto choice blokem zasílání zpráv.

Zruší propojení všech cílů z tohoto choice bloku zasílání zpráv.

virtual void unlink_targets();

Poznámky

Tato metoda nemusí být volána z destruktoru, protože destruktor pro interní single_assignment blok zruší propojení správně.

hodnotu

Získá zprávu, jejíž index byl vybrán blokem choice zasílání zpráv.

template <
    typename _Payload_type
>
_Payload_type const& value();

Parametry

_Payload_type
Typ datové části zprávy.

Vrácená hodnota

Datová část zprávy.

Poznámky

Vzhledem k tomu, že choice blok zasílání zpráv může přijímat vstupy s různými typy datových částí, je nutné zadat typ datové části v okamžiku načtení. Typ můžete určit na základě výsledku index metody.

Viz také

concurrency – obor názvů
join – třída
single_assignment – třída