Sdílet prostřednictvím


Třída unbounded_buffer

Blok unbounded_buffer zasílání zpráv je multi-target, multi-source, uspořádaný propagator_block schopný ukládat nevázaný 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 uložených a šířených vyrovnávací pamětí.

Členové

Veřejné konstruktory

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

Jméno popis
Dequeue Odebere položku z unbounded_buffer bloku zasílání zpráv.
Enqueue Přidá položku do unbounded_buffer bloku zasílání zpráv.

Chráněné metody

Jméno popis
accept_message 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á dříve nabízenou zprávu blokem unbounded_buffer 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 unbounded_buffer blokem zasílání zpráv.
process_input_messages message_PMessage Umístí v tomto unbounded_buffer bloku zasílání zpráv blok a pokusí se ho 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.
propagate_output_messages message_PMessage Umístí v tomto unbounded_buffer bloku zasílání zpráv blok a pokusí se ho nabídnout všem propojeným cílům. (Přepisuje source_block::p ropagate_output_messages.)
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 unbounded_buffer 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 unbounded_buffer bloku zasílání zpráv. Vyvolá se metodou send při zavolání zdrojovým blokem.
supports_anonymous_source 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

propagator_block

unbounded_buffer

Požadavky

Hlavička: agents.h

Obor názvů: souběžnost

accept_message

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
message Nabízený runtime_object_identity objekt.

Vrácená hodnota

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

consume_message

Využívá dříve nabízenou zprávu blokem unbounded_buffer zasílání zpráv a vyhrazenou cílem a převádí vlastnictví volajícímu.

virtual message<_Type> * 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.

Dequeue

Odebere položku z unbounded_buffer bloku zasílání zpráv.

_Type dequeue();

Vrácená hodnota

Datová část zprávy byla odebrána z objektu unbounded_buffer.

Enqueue

Přidá položku do unbounded_buffer bloku zasílání zpráv.

bool enqueue(
   _Type const&                 _Item
);

Parametry

_Položky
Položka k přidání.

Vrácená hodnota

true pokud byla položka přijata, false jinak.

Zpětné volání, které upozorní, že byl nový cíl propojen 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.

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.

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.

Vrácená hodnota

Message_status označení toho, co se cíl rozhodl se zprávou udělat.

propagate_output_messages

message_PMessage Umístí v tomto unbounded_buffer bloku zasílání zpráv blok a pokusí se ho nabídnout všem propojeným cílům.

virtual void propagate_output_messages();

Poznámky

Pokud již před touto zprávou v unbounded_buffertéto zprávě existuje , šíření do propojených cílů se neprojeví, dokud nebudou přijaty nebo spotřebovány žádné dřívější zprávy. První propojený cíl úspěšně accept nebo consume zpráva převezme vlastnictví a žádný jiný cíl pak zprávu nemůže získat.

process_input_messages

message_PMessage Umístí v tomto unbounded_buffer bloku zasílání zpráv blok a pokusí se ho 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.

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 unbounded_buffer 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 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.

Vrácená hodnota

Message_status označení toho, co se cíl rozhodl se zprávou udělat.

supports_anonymous_source

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

Vrácená hodnota

true vzhledem k tomu, že blok odloží nabízené zprávy.

unbounded_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 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 (_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ů
overwrite_buffer – třída
single_assignment – třída