Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
single_assignment Blok zasílání zpráv je více-cílový, více-zdrojový, uspořádaný propagator_block, schopný ukládat jeden jednorázový zápis message.
Syntaxe
template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Parametry
T
Typ datové části zprávy uložené a šířené vyrovnávací pamětí.
Členové
Veřejné konstruktory
| Název | Popis |
|---|---|
| single_assignment | Přetíženo. Vytvoří single_assignment blok pro zasílání zpráv. |
| ~single_assignment Destruktor |
single_assignment Zničí blok zasílání zpráv. |
Veřejné metody
| Název | Popis |
|---|---|
| má_hodnotu | Kontroluje, zda byl tento single_assignment blok zasílání zpráv už inicializován hodnotou. |
| value | Získá odkaz na aktuální datovou část zprávy, která je uložena v bloku zasílání zpráv single_assignment. |
Chráněné metody
| Název | Popis |
|---|---|
| přijmout_zprávu | Přijímá zprávu, která byla nabízena tímto single_assignment blokem zasílání zpráv a vrací kopii zprávy volajícímu. |
| consume_message | Zpracovává zprávu, kterou dříve nabídl single_assignment a kterou rezervoval cíl, a vrátí kopii zprávy volajícímu. |
| oznámení_o_cíli_odkazu | Funkce zpětného volání, která upozorní na propojení nového cíle s tímto single_assignment blokem zasílání zpráv. |
| propagate_message | Asynchronně předává zprávu z ISource bloku do tohoto single_assignment bloku zasílání zpráv. Vyvolá se metodou propagate při zavolání zdrojovým blokem. |
| šířit_na_jakékoliv_cíle | Umístí message _PMessage do tohoto single_assignment bloku zasílání zpráv a nabízí ho všem propojeným cílům. |
| release_message | Uvolní předchozí rezervaci zpráv. (Přepisuje source_block::release_message.) |
| rezervační_zpráva | Zarezervuje dříve nabízenou zprávu v tomto single_assignment bloku zasílání zpráv. (Přepisuje source_block::reserve_message.) |
| resume_propagation | Po uvolnění rezervace se obnoví šíření. (Přepsání source_block::resume_propagation.) |
| send_message | Synchronně předává zprávu z ISource bloku do tohoto single_assignment bloku zasílání zpráv. Vyvolá se metodou send při zavolání zdrojovým blokem. |
Poznámky
Blok single_assignment pro zasílání zpráv předává kopie své zprávy ke každému cíli.
Další informace naleznete v tématu Asynchronní bloky zpráv.
Hierarchie dědičnosti
single_assignment
Požadavky
Hlavička: agents.h
Obor názvů: souběžnost
přijmout_zprávu
Přijímá zprávu, která byla nabízena tímto single_assignment blokem zasílání zpráv a vrací kopii zprávy volajícímu.
virtual message<T>* accept_message(runtime_object_identity _MsgId);
Parametry
_MsgId
runtime_object_identity Nabízený message objekt.
Návratová hodnota
Ukazatel na message objekt, ke kterému má volající nyní vlastnictví.
Poznámky
Blok single_assignment zpráv vrátí kopie zprávy svým cílům, aniž by přenesl vlastnictví současně držené zprávy.
zpracovat_zprávu
Zpracovává zprávu, kterou dříve nabídl single_assignment a kterou rezervoval cíl, a vrátí kopii zprávy volajícímu.
virtual message<T>* consume_message(runtime_object_identity _MsgId);
Parametry
_MsgId
runtime_object_identity objektu message, který je spotřebováván.
Návratová hodnota
Ukazatel na message objekt, ke kterému má volající nyní vlastnictví.
Poznámky
Podobá se accept, ale vždy mu předchází volání reserve.
má_hodnotu
Kontroluje, zda byl tento single_assignment blok zasílání zpráv už inicializován hodnotou.
bool has_value() const;
Návratová hodnota
true pokud blok obdržel hodnotu, false jinak.
upozornění_na_cíl_odkazu
Funkce zpětného volání, která upozorní na propojení nového cíle s tímto single_assignment blokem zasílání zpráv.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Parametry
_PTarget
Ukazatel na nově propojený cíl.
šířit_zprávu
Asynchronně předává zprávu z ISource bloku do tohoto single_assignment bloku zasílání zpráv. Vyvolá se metodou propagate při zavolání zdrojovým blokem.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Parametry
_PMessage
Ukazatel na message objekt.
_PSource
Ukazatel na zdrojový blok nabízející zprávu.
Návratová hodnota
Message_status indikace toho, co se cíl rozhodl udělat se zprávou.
šířit na všechny cíle
Umístí message_PMessage do tohoto single_assignment bloku zpráv a nabídne jej všem propojeným cílům.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Parametry
_PMessage
Ukazatel na message, který naznačuje, že tento single_assignment blok zasílání zpráv převzal vlastnictví.
zpráva o vydání
Uvolní předchozí rezervaci zpráv.
virtual void release_message(runtime_object_identity _MsgId);
Parametry
_MsgId
Uvolnění runtime_object_identity objektu message .
rezervovat_zprávu
Zarezervuje dříve nabízenou zprávu v tomto single_assignment bloku zasílání zpráv.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parametry
_MsgId
Objekt message, který je rezervován pro runtime_object_identity.
Návratová hodnota
true pokud byla zpráva úspěšně rezervována, jinak false.
Poznámky
Po zavolání reserve, pokud se vrátí true, musí být buď consume nebo release zavolána, aby došlo k převzetí nebo uvolnění vlastnictví zprávy.
resume_propagation
Po uvolnění rezervace se obnoví šíření.
virtual void resume_propagation();
odeslat_zprávu
Synchronně předává zprávu z ISource bloku do tohoto single_assignment bloku zasílání zpráv. Vyvolá se metodou send při zavolání zdrojovým blokem.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Parametry
_PMessage
Ukazatel na message objekt.
_PSource
Ukazatel na zdrojový blok nabízející zprávu.
Návratová hodnota
Message_status indikace toho, co se cíl rozhodl udělat se zprávou.
jednorázové přiřazení
Vytvoří single_assignment blok pro zasílání zpráv.
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);
Parametry
_Filtr
Funkce filtru, která určuje, jestli mají být přijaté zprávy.
_PScheduler
Objekt Scheduler , ve kterém je naplánována úloha šíření bloku single_assignment zasílání zpráv.
_PScheduleGroup
Objekt ScheduleGroup , ve kterém je naplánována úloha šíření bloku single_assignment zasílání zpráv. Použití Scheduler objektu je dané skupinou plánů.
Poznámky
Modul runtime používá výchozí plánovač, pokud nezadáte buď parametr _PScheduler nebo parametr _PScheduleGroup.
Typ filter_method je functor s podpisem bool (T const &) , který je vyvolán tímto single_assignment blokem zasílání zpráv, aby určil, zda má přijmout nabízenou zprávu.
~jednoduché_přiřazení
single_assignment Zničí blok zasílání zpráv.
~single_assignment();
hodnota
Získá odkaz na aktuální datovou část zprávy, která je uložena v bloku zasílání zpráv single_assignment.
T const& value();
Návratová hodnota
Datová část uložené zprávy.
Poznámky
Tato metoda počká, až zpráva dorazí, pokud není v bloku zasílání zpráv aktuálně uložena single_assignment žádná zpráva.
Viz také
concurrency – obor názvů
třída overwrite_buffer
Třída unbounded_buffer