join – třída
join
Blok zasílání zpráv je jednocílový, vícesměrový, uspořádanýpropagator_block
, který kombinuje zprávy typu T
z každého ze svých zdrojů.
Syntaxe
template<class T,
join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
multi_link_registry<ISource<T>>>;
Parametry
T
Typ datové části připojených zpráv a šířený blokem.
_Jtype
Druh join
bloku je, buď greedy
nebo non_greedy
Členové
Veřejné konstruktory
Název | Popis |
---|---|
join | Přetíženo. join Vytvoří blok zasílání zpráv. |
~join – destruktor | join Zničí blok. |
Chráněné metody
Název | Popis |
---|---|
accept_message | Přijme zprávu, kterou tento join blok zasílání zpráv nabízí, a přenese vlastnictví volajícímu. |
consume_message | Využívá dříve nabízenou zprávu blokem join zasílání zpráv a vyhrazenou cílem a převádí vlastnictví volajícímu. |
link_target_notification | Zpětné volání, které upozorní, že byl nový cíl propojen s tímto join blokem zasílání zpráv. |
propagate_message | Asynchronně předává zprávu z ISource bloku do tohoto join bloku zasílání zpráv. Vyvolá se metodou propagate při zavolání zdrojovým blokem. |
propagate_to_any_targets | Vytvoří výstupní zprávu obsahující vstupní zprávu z každého zdroje, když všechny šíří zprávu. Odešle tuto výstupní zprávu do každého z cílů. |
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 join 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.) |
Poznámky
Další informace naleznete v tématu Asynchronní bloky zpráv.
Hierarchie dědičnosti
join
Požadavky
Hlavička: agents.h
Namespace: souběžnost
accept_message
Přijme zprávu, kterou tento join
blok zasílání zpráv nabízí, a přenese vlastnictví volajícímu.
virtual message<_OutputType>* 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í.
consume_message
Využívá dříve nabízenou zprávu blokem join
zasílání zpráv a vyhrazenou cílem a převádí vlastnictví volajícímu.
virtual message<_OutputType>* 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
.
join
join
Vytvoří blok zasílání zpráv.
join(
size_t _NumInputs);
join(
size_t _NumInputs,
filter_method const& _Filter);
join(
Scheduler& _PScheduler,
size_t _NumInputs);
join(
Scheduler& _PScheduler,
size_t _NumInputs,
filter_method const& _Filter);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs,
filter_method const& _Filter);
Parametry
_NumInputs
Počet vstupů, které tento join
blok povolí.
_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 join
zasílání zpráv.
_PScheduleGroup
Objekt ScheduleGroup
, ve kterém je naplánována úloha šíření bloku join
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 join
blokem zasílání zpráv, aby určil, zda má přijmout nabízenou zprávu.
~připojit
join
Zničí blok.
~join();
link_target_notification
Zpětné volání, které upozorní, že byl nový cíl propojen s tímto join
blokem zasílání zpráv.
virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);
propagate_message
Asynchronně předává zprávu z ISource
bloku do tohoto join
bloku zasílání zpráv. Vyvolá se metodou propagate
při zavolání zdrojovým blokem.
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
Vytvoří výstupní zprávu obsahující vstupní zprávu z každého zdroje, když všechny šíří zprávu. Odešle tuto výstupní zprávu do každého z cílů.
void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);
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 join
bloku zasílání zpráv.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parametry
_MsgId
message
Nabízený runtime_object_identity
objekt.
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();
Viz také
concurrency – obor názvů
choice – třída
multitype_join – třída