Třída single_assignment
single_assignment
Blok zasílání zpráv je multi-target, multi-source, uspořádaný propagator_block
schopný ukládat jeden, zápis-jednou 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. single_assignment Vytvoří blok zasílání zpráv. |
~single_assignment Destruktor | single_assignment Zničí blok zasílání zpráv. |
Veřejné metody
Název | Popis |
---|---|
has_value | Zkontroluje, jestli se tento single_assignment blok zasílání zpráv ještě inicializoval s hodnotou. |
value | Získá odkaz na aktuální datovou část zprávy, která je uložena single_assignment v bloku zasílání zpráv. |
Chráněné metody
Název | Popis |
---|---|
accept_message | 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 | Využívá dříve nabízenou single_assignment zprávu a vyhrazenou cílem a vrací kopii zprávy volajícímu. |
link_target_notification | Zpětné volání, které upozorní, že byl nový cíl propojen 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. |
propagate_to_any_targets | message _PMessage Umístí do tohoto single_assignment bloku zasílání zpráv a nabídne ho všem propojeným cílům. |
release_message | Uvolní předchozí rezervaci zpráv. (Přepsání source_block::release_message.) |
reserve_message | Zarezervuje dříve nabízenou zprávu v tomto single_assignment bloku zasílání zpráv. (Přepsání source_block::reserve_message.) |
resume_propagation | Po vydá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
zasílání zpráv rozšíří kopie zprávy do každého cíle.
Další informace naleznete v tématu Asynchronní bloky zpráv.
Hierarchie dědičnosti
single_assignment
Požadavky
Hlavička: agents.h
Namespace: souběžnost
accept_message
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
message
Nabízený runtime_object_identity
objekt.
Návratová hodnota
Ukazatel na message
objekt, ke kterému má volající nyní vlastnictví.
Poznámky
Blok single_assignment
zasílání zpráv vrátí kopie zprávy do svých cílů a nepřenese vlastnictví aktuálně uchovávané zprávy.
consume_message
Využívá dříve nabízenou single_assignment
zprávu a vyhrazenou cílem a vrací kopii zprávy volajícímu.
virtual message<T>* consume_message(runtime_object_identity _MsgId);
Parametry
_MsgId
Objekt runtime_object_identity
, který message
se spotřebovává.
Návratová hodnota
Ukazatel na message
objekt, ke kterému má volající nyní vlastnictví.
Poznámky
accept
Podobá se , ale vždy předchází volání reserve
.
has_value
Zkontroluje, jestli se tento single_assignment
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.
link_target_notification
Zpětné volání, které upozorní, že byl nový cíl propojen 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.
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.
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 označení toho, co se cíl rozhodl se zprávou udělat.
propagate_to_any_targets
message
_PMessage
Umístí do tohoto single_assignment
bloku zasílání zpráv a nabídne ho všem propojeným cílům.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Parametry
_PMessage
Ukazatel na message
to, že tento single_assignment
blok zasílání zpráv převzal vlastnictví.
release_message
Uvolní předchozí rezervaci zpráv.
virtual void release_message(runtime_object_identity _MsgId);
Parametry
_MsgId
Uvolnění runtime_object_identity
objektu message
.
reserve_message
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 runtime_object_identity
, který message
je rezervován.
Návratová hodnota
true
pokud byla zpráva úspěšně rezervována, false
jinak.
Poznámky
Po reserve
zavolání, pokud se vrátí true
, buď consume
nebo release
musí být volána k převzetí nebo uvolnění vlastnictví zprávy.
resume_propagation
Po vydání rezervace se obnoví šíření.
virtual void 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.
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 označení toho, co se cíl rozhodl se zprávou udělat.
single_assignment
single_assignment
Vytvoří blok 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
objekt je odvozen ze skupiny plánů.
Poznámky
Modul runtime používá výchozí plánovač, pokud nezadáte _PScheduler
parametry._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.
~single_assignment
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 single_assignment
v bloku zasílání zpráv.
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ů
overwrite_buffer – třída
unbounded_buffer – třída