source_block – třída
Třída source_block
je abstraktní základní třída pro bloky pouze zdroje. Třída poskytuje základní funkce správy odkazů a také běžné kontroly chyb.
Syntaxe
template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;
Parametry
_TargetLinkRegistry
Registr propojení, který se má použít k uchovávání cílových odkazů.
_MessageProcessorType
Typ procesoru pro zpracování zpráv.
Členové
Veřejné definice typedef
Název | Popis |
---|---|
target_iterator |
Iterátor, který prochází propojené cíle. |
Veřejné konstruktory
Název | Popis |
---|---|
source_block | source_block Vytvoří objekt. |
~source_block Destruktor | source_block Zničí objekt. |
Veřejné metody
Název | Popis |
---|---|
přijmout | Přijme zprávu, kterou tento source_block objekt nabízí, a přenese vlastnictví volajícímu. |
acquire_ref | Získá počet odkazů na tento source_block objekt, aby se zabránilo odstranění. |
spotřebovat | Využívá zprávu, kterou tento source_block objekt dříve nabízí, a úspěšně rezervována cílem a převádí vlastnictví volajícímu. |
link_target | Pro propojení cílového bloku s tímto source_block objektem. |
uvolnit | Uvolní předchozí úspěšnou rezervaci zpráv. |
release_ref | Uvolní počet odkazů na tento source_block objekt. |
rezerva | Zarezervuje zprávu, kterou tento source_block objekt dříve nabídl. |
unlink_target | Zruší propojení cílového bloku s tímto source_block objektem. |
unlink_targets | Zruší propojení všech cílových bloků z tohoto source_block objektu. (Přepsání ISource::unlink_targets.) |
Chráněné metody
Název | Popis |
---|---|
accept_message | Při přepsání v odvozené třídě přijímá nabízenou zprávu ze zdroje. Bloky zpráv by měly tuto metodu přepsat, aby ověřila _MsgId a vrátila zprávu. |
async_send | Asynchronně zařadí zprávy do fronty a spustí úlohu šíření, pokud to ještě nebylo provedeno. |
consume_message | Při přepsání v odvozené třídě spotřebovává zprávu, která byla dříve vyhrazena. |
enable_batched_processing | Povolí dávkové zpracování pro tento blok. |
initialize_source | Inicializuje message_propagator uvnitř tohoto source_block . |
link_target_notification | Zpětné volání, které upozorní na propojení nového cíle s tímto source_block objektem. |
process_input_messages | Zpracování vstupních zpráv To je užitečné pouze pro bloky šíření, které jsou odvozeny z source_block |
propagate_output_messages | Šíření zpráv do cílů |
propagate_to_any_targets | Při přepsání v odvozené třídě rozšíří danou zprávu do libovolného nebo všech propojených cílů. Toto je hlavní rutina šíření bloků zpráv. |
release_message | Při přepsání v odvozené třídě uvolní předchozí rezervaci zprávy. |
remove_targets | Odebere všechny cílové odkazy pro tento zdrojový blok. To by mělo být volána z destruktoru. |
reserve_message | Při přepsání v odvozené třídě si vyhrazuje zprávu dříve nabízenou tímto source_block objektem. |
resume_propagation | Po přepsání v odvozené třídě se po vydání rezervace obnoví šíření. |
sync_send | Synchronně zařadí zprávy do fronty a spustí úlohu šíření, pokud to ještě nebylo provedeno. |
unlink_target_notification | Zpětné volání, které upozorní, že cíl byl od tohoto source_block objektu odpojen. |
wait_for_outstanding_async_sends | Čeká na dokončení všech asynchronních šíření. Toto spinové čekání specifické pro šíření se používá v destruktory bloků zpráv, aby se zajistilo, že všechny asynchronní šíření mají čas dokončit před zničením bloku. |
Poznámky
Bloky zpráv by měly být odvozeny z tohoto bloku, aby využívaly správu propojení a synchronizaci poskytované touto třídou.
Hierarchie dědičnosti
source_block
Požadavky
Hlavička: agents.h
Namespace: souběžnost
accept
Přijme zprávu, kterou tento source_block
objekt nabízí, a přenese vlastnictví volajícímu.
virtual message<_Target_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_MsgId
message
Nabízený runtime_object_identity
objekt.
_PTarget
Ukazatel na cílový blok, který volá metodu accept
.
Návratová hodnota
Ukazatel na message
objekt, ke kterému má volající nyní vlastnictví.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je NULL
parametr _PTarget
.
Metoda accept
je volána cílem, zatímco zpráva je nabízena tímto ISource
blokem. Vrácený ukazatel zprávy se může lišit od ukazatele zprávy předaného do propagate
metody ITarget
bloku, pokud se tento zdroj rozhodne vytvořit kopii zprávy.
accept_message
Při přepsání v odvozené třídě přijímá nabízenou zprávu ze zdroje. Bloky zpráv by měly tuto metodu přepsat, aby ověřila _MsgId
a vrátila zprávu.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Parametry
_MsgId
Identita objektu modulu runtime objektu message
.
Návratová hodnota
Ukazatel na zprávu, že volající teď má vlastnictví.
Poznámky
Pokud chcete převést vlastnictví, měl by se vrátit původní ukazatel zprávy. Aby bylo možné zachovat vlastnictví, je potřeba vytvořit a vrátit kopii datové části zprávy.
acquire_ref
Získá počet odkazů na tento source_block
objekt, aby se zabránilo odstranění.
virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);
Poznámky
Tato metoda je volána objektem ITarget
, který je propojen s tímto zdrojem během link_target
metody.
async_send
Asynchronně zařadí zprávy do fronty a spustí úlohu šíření, pokud to ještě nebylo provedeno.
virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);
Parametry
_Msg
Ukazatel na objekt, který message
se má asynchronně odeslat.
consume
Využívá zprávu, kterou tento source_block
objekt dříve nabízí, a úspěšně rezervována cílem a převádí vlastnictví volajícímu.
virtual message<_Target_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_MsgId
Rezervovaný runtime_object_identity
message
objekt.
_PTarget
Ukazatel na cílový blok, který volá metodu consume
.
Návratová hodnota
Ukazatel na message
objekt, ke kterému má volající nyní vlastnictví.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je NULL
parametr _PTarget
.
Metoda vyvolá bad_target výjimku, pokud parametr _PTarget
nepředstavuje cíl, který volal reserve
.
Metoda consume
je podobná accept
, ale musí být vždy před voláním reserve
vráceného true
.
consume_message
Při přepsání v odvozené třídě spotřebovává zprávu, která byla dříve vyhrazena.
virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;
Parametry
_MsgId
Objekt runtime_object_identity
, který message
se spotřebovává.
Návratová hodnota
Ukazatel na zprávu, že volající teď má vlastnictví.
Poznámky
accept
Podobá se , ale vždy předchází volání reserve
.
enable_batched_processing
Povolí dávkové zpracování pro tento blok.
void enable_batched_processing();
initialize_source
Inicializuje message_propagator
uvnitř tohoto source_block
.
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Parametry
_PScheduler
Plánovač, který se má použít pro plánování úkolů.
_PScheduleGroup
Skupina plánů, která se má použít pro plánování úkolů.
link_target
Pro propojení cílového bloku s tímto source_block
objektem.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_PTarget
Ukazatel na blok pro propojení s tímto source_block
objektemITarget
.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je NULL
parametr _PTarget
.
link_target_notification
Zpětné volání, které upozorní na propojení nového cíle s tímto source_block
objektem.
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
process_input_messages
Zpracování vstupních zpráv To je užitečné pouze pro bloky šíření, které jsou odvozeny z source_block
virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);
Parametry
_PMessage
Ukazatel na zprávu, která se má zpracovat.
propagate_output_messages
Šíření zpráv do cílů
virtual void propagate_output_messages();
propagate_to_any_targets
Při přepsání v odvozené třídě rozšíří danou zprávu do libovolného nebo všech propojených cílů. Toto je hlavní rutina šíření bloků zpráv.
virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);
Parametry
_PMessage
Ukazatel na zprávu, která se má rozšířit.
uvolnit
Uvolní předchozí úspěšnou rezervaci zpráv.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_MsgId
Rezervovaný runtime_object_identity
message
objekt.
_PTarget
Ukazatel na cílový blok, který volá metodu release
.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je NULL
parametr _PTarget
.
Metoda vyvolá bad_target výjimku, pokud parametr _PTarget
nepředstavuje cíl, který volal reserve
.
release_message
Při přepsání v odvozené třídě uvolní předchozí rezervaci zprávy.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Parametry
_MsgId
Uvolnění runtime_object_identity
objektu message
.
release_ref
Uvolní počet odkazů na tento source_block
objekt.
virtual void release_ref(_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_PTarget
Ukazatel na cílový blok, který tuto metodu volá.
Poznámky
Tato metoda je volána ITarget
objektem, který je odpojen od tohoto zdroje. Zdrojový blok může uvolnit všechny prostředky rezervované pro cílový blok.
remove_targets
Odebere všechny cílové odkazy pro tento zdrojový blok. To by mělo být volána z destruktoru.
void remove_targets();
rezerva
Zarezervuje zprávu, kterou tento source_block
objekt dříve nabídl.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_MsgId
message
Nabízený runtime_object_identity
objekt.
_PTarget
Ukazatel na cílový blok, který volá metodu reserve
.
Návratová hodnota
true
pokud byla zpráva úspěšně rezervována, false
jinak. Rezervace můžou selhat z mnoha důvodů, mezi které patří: zpráva už byla rezervována nebo přijata jiným cílem, zdroj mohl rezervace odepřít atd.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je NULL
parametr _PTarget
.
Jakmile zavoláte reserve
, pokud bude úspěšné, musíte zavolat buď consume
nebo release
v zájmu převzetí nebo vzdání vlastnictví zprávy, v uvedeném pořadí.
reserve_message
Při přepsání v odvozené třídě si vyhrazuje zprávu dříve nabízenou tímto source_block
objektem.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
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 přepsání v odvozené třídě se po vydání rezervace obnoví šíření.
virtual void resume_propagation() = 0;
source_block
source_block
Vytvoří objekt.
source_block();
~source_block
source_block
Zničí objekt.
virtual ~source_block();
sync_send
Synchronně zařadí zprávy do fronty a spustí úlohu šíření, pokud to ještě nebylo provedeno.
virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);
Parametry
_Msg
Ukazatel na objekt, který message
se má synchronně odeslat.
unlink_target
Zruší propojení cílového bloku s tímto source_block
objektem.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_PTarget
Ukazatel na blok, který ITarget
má zrušit propojení s tímto source_block
objektem.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je NULL
parametr _PTarget
.
unlink_target_notification
Zpětné volání, které upozorní, že cíl byl od tohoto source_block
objektu odpojen.
virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_PTarget
Blok ITarget
, který byl odpojen.
unlink_targets
Zruší propojení všech cílových bloků z tohoto source_block
objektu.
virtual void unlink_targets();
wait_for_outstanding_async_sends
Čeká na dokončení všech asynchronních šíření. Toto spinové čekání specifické pro šíření se používá v destruktory bloků zpráv, aby se zajistilo, že všechny asynchronní šíření mají čas dokončit před zničením bloku.
void wait_for_outstanding_async_sends();