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 tuple
založený na jazyce představující datové části vstupních zdrojů.
Členové
Veřejné definice typedef
Název | Popis |
---|---|
type |
Alias typu pro T . |
Veřejné konstruktory
Název | 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
Název | 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í. |
spotřebovat | 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. |
uvolnit | Uvolní předchozí úspěšnou rezervaci zpráv. |
release_ref | Uvolní referenční počet na tento choice blok zasílání zpráv. |
rezerva | 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
choice
Požadavky
Hlavička: agents.h
Namespace: 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
.
Návratová 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_identity
message
objekt.
_PTarget
Ukazatel na cílový blok, který volá metodu consume
.
Návratová 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;
Návratová 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();
Návratová hodnota
Index zprávy.
Poznámky
Datovou část zprávy lze extrahovat pomocí get
metody.
link_target
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.
uvolnit
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.
rezerva
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
.
Návratová 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í.
unlink_target
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.
unlink_targets
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ě.
hodnota
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.
Návratová 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