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
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 |
---|---|
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
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.
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 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á.
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
.
vyřadit z fronty
Odebere položku z unbounded_buffer
bloku zasílání zpráv.
_Type dequeue();
Návratová hodnota
Datová část zprávy byla odebrána z objektu 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.
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.
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.
Návratová 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_buffer
té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.
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();
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.
Návratová 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();
Návratová 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