Třída unbounded_buffer

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

ISource

ITarget

source_block

propagátorový_blok

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.

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