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

Jméno 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

Jméno 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

Jméno 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

ISource

ITarget

source_block

propagator_block

single_assignment

Požadavky

Hlavička: agents.h

Obor názvů: 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.

Vrácená 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á.

Vrácená hodnota

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

Poznámky

acceptPodobá 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;

Vrácená hodnota

true pokud blok obdržel hodnotu, false jinak.

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.

Vrácená 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.

Vrácená 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.

Vrácená 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();

hodnotu

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();

Vrácená 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