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.
Blok unbounded_buffer zasílání zpráv je víceúčelový, vícezdrojový, uspořádaný propagator_block, který je schopen ukládat neomezený počet zpráv.
Syntaxe
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
Parametry
_Typ
Typ datové části zpráv, které jsou ukládány a přenášeny vyrovnávací pamětí.
Členové
Veřejné konstruktory
| Název | Popis |
|---|---|
| unbounded_buffer | Přetíženo.
unbounded_buffer Vytvoří blok zasílání zpráv. |
| ~unbounded_buffer Destruktor |
unbounded_buffer Zničí blok zasílání zpráv. |
Veřejné metody
| Název | Popis |
|---|---|
| vyřadit z fronty | Odebere položku z unbounded_buffer bloku zasílání zpráv. |
| zařadit do fronty | Přidá položku do unbounded_buffer bloku zasílání zpráv. |
Chráněné metody
| Název | Popis |
|---|---|
| přijmout_zprávu | Přijme zprávu, kterou tento unbounded_buffer blok zasílání zpráv nabízí, a přenese vlastnictví volajícímu. |
| consume_message | Využívá zprávu, kterou dříve nabízel blok unbounded_buffer pro zpracování zpráv a kterou vyhradilo cílové místo, čímž převádí vlastnictví na volajícího. |
| oznámení_o_cíli_odkazu | Funkce zpětného volání, která upozorní na propojení nového cíle s tímto unbounded_buffer blokem zasílání zpráv. |
| zpracovat_vstupní_zprávy | Umístí message_PMessage do tohoto unbounded_buffer bloku pro zasílání zpráv a pokusí se jej nabídnout všem propojeným cílům. |
| propagate_message | Asynchronně předává zprávu z ISource bloku do tohoto unbounded_buffer bloku zasílání zpráv. Vyvolá se metodou propagate při zavolání zdrojovým blokem. |
| šířit_výstupní_zprávy | Umístí message_PMessage do tohoto unbounded_buffer bloku pro zasílání zpráv a pokusí se jej nabídnout všem propojeným cílům. (Přepisuje source_block::propagate_output_messages.) |
| 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 unbounded_buffer 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 unbounded_buffer bloku zasílání zpráv. Vyvolá se metodou send při zavolání zdrojovým blokem. |
| podporuje_anonymní_zdroj | Přepíše metodu supports_anonymous_source tak, aby označovala, že tento blok může přijímat zprávy nabízené zdrojem, který není propojený. (Přepsání ITarget::supports_anonymous_source.) |
Další informace naleznete v tématu Asynchronní bloky zpráv.
Hierarchie dědičnosti
unbounded_buffer
Požadavky
Hlavička: agents.h
Obor názvů: souběžnost
přijmout_zprávu
Přijme zprávu, kterou tento unbounded_buffer blok zasílání zpráv nabízí, a přenese vlastnictví volajícímu.
virtual message<_Type> * 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í.
zpracovat_zprávu
Využívá zprávu, kterou dříve nabízel blok unbounded_buffer pro zpracování zpráv a kterou vyhradilo cílové místo, čímž převádí vlastnictví na volajícího.
virtual message<_Type> * 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.
odstranit z fronty
Odebere položku z unbounded_buffer bloku zasílání zpráv.
_Type dequeue();
Návratová hodnota
Zpráva obsahovala datovou část, kterou jsme odebrali z unbounded_buffer.
zařadit do fronty
Přidá položku do unbounded_buffer bloku zasílání zpráv.
bool enqueue(
_Type const& _Item
);
Parametry
_Položka
Položka k přidání.
Návratová hodnota
true pokud byla položka přijata, 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 unbounded_buffer blokem zasílání zpráv.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
Parametry
_PTarget
Ukazatel na nově propojený cíl.
šířit_zprávu
Asynchronně předává zprávu z ISource bloku do tohoto unbounded_buffer bloku zasílání zpráv. Vyvolá se metodou propagate při zavolání zdrojovým blokem.
virtual message_status propagate_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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_výstupní_zprávy
Umístí message_PMessage do tohoto bloku zasílání zpráv unbounded_buffer a pokusí se ho nabídnout všem propojeným cílům.
virtual void propagate_output_messages();
Poznámky
Pokud je před touto zprávou v unbounded_buffer již jiná zpráva, šíření do propojených cílů nenastane, dokud nejsou všechny předchozí zprávy přijaty nebo spotřebovány. První propojený cíl, který úspěšně accept nebo consume zprávu, převezme její vlastnictví, a žádný jiný cíl pak nemůže zprávu získat.
zpracovat_vstupní_zprávy
Umístí message_PMessage do tohoto unbounded_buffer bloku pro zasílání zpráv a pokusí se jej nabídnout všem propojeným cílům.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Parametry
_PMessage
Ukazatel na zprávu, která se má zpracovat.
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 unbounded_buffer 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 unbounded_buffer bloku zasílání zpráv. Vyvolá se metodou send při zavolání zdrojovým blokem.
virtual message_status send_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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.
podporuje_anonymní_zdroj
Přepíše metodu supports_anonymous_source tak, aby označovala, že tento blok může přijímat zprávy nabízené zdrojem, který není propojený.
virtual bool supports_anonymous_source();
Návratová hodnota
true vzhledem k tomu, že blok neodkládá nabízené zprávy.
neomezený buffer
unbounded_buffer Vytvoří blok zasílání zpráv.
unbounded_buffer();
unbounded_buffer(
filter_method const& _Filter
);
unbounded_buffer(
Scheduler& _PScheduler
);
unbounded_buffer(
Scheduler& _PScheduler,
filter_method const& _Filter
);
unbounded_buffer(
ScheduleGroup& _PScheduleGroup
);
unbounded_buffer(
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 unbounded_buffer zasílání zpráv.
_PScheduleGroup
Objekt ScheduleGroup , ve kterém je naplánována úloha šíření bloku unbounded_buffer 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 (_Type const &) , který je vyvolán tímto unbounded_buffer blokem zasílání zpráv, aby určil, zda má přijmout nabízenou zprávu.
~unbounded_buffer
unbounded_buffer Zničí blok zasílání zpráv.
~unbounded_buffer();
Viz také
concurrency – obor názvů
třída overwrite_buffer
single_assignment Class