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.
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é typové definice
| Název | Popis |
|---|---|
target_iterator |
Iterátor, který prochází propojené cíle. |
Veřejné konstruktory
| Název | Popis |
|---|---|
| source_block | Konstruuje objekt source_block. |
| ~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 | Spotřebovává zprávu, kterou tento source_block objekt dříve nabízel a kterou cíl úspěšně rezervoval, a převádí vlastnictví volajícímu. |
| link_target | Propojí cílový blok s tímto source_block objektem. |
| uvolnit | Uvolní předchozí úspěšně rezervovanou zprávu. |
| release_ref | Uvolní počítadlo 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 |
|---|---|
| přijmout_zprávu | 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ěřily _MsgId a vrátily 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. |
| oznámení_o_cíli_odkazu | Zpětné volání, které upozorní na propojení nového cíle s tímto source_block objektem. |
| zpracovat_vstupní_zprávy | Zpracování vstupních zpráv To je užitečné pouze pro bloky šíření, které jsou odvozeny z source_block |
| šířit_výstupní_zprávy | Šíření zpráv do cílů |
| šířit_na_jakékoliv_cíle | Při přepsání v odvozené třídě předává danou zprávu na libovolné nebo všechny propojené cíle. 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. |
| odebrat_cíle | Odebere všechny cílové odkazy pro tento zdrojový blok. To by mělo být voláno destruktorem. |
| rezervační_zpráva | 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é oznámí, že cíl byl od tohoto source_block objektu odpojen. |
| čekat_na_nevyřízené_asynchronní_odeslání | Čeká na dokončení všech asynchronních šíření. Toto spinové čekání specifické pro propagátory se používá v destruktorech bloků zpráv, aby se zajistilo, že všechny asynchronní propagace mají čas dokončit se 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
Obor názvů: souběžnost
přijmout
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
runtime_object_identity Nabízený message 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 _PTargetparametr NULL .
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.
přijmout_zprávu
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ěřily _MsgId a vrátily zprávu.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Parametry
_MsgId
Identita běhového objektu objektu message.
Návratová hodnota
Ukazatel na zprávu, jejíž vlastnictví nyní přebírá volající.
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 message objekt, který se má asynchronně odeslat.
využít
Spotřebovává zprávu, kterou tento source_block objekt dříve nabízel a kterou cíl úspěšně rezervoval, 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ý objekt runtime_object_identitymessage.
_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 _PTargetparametr NULL .
Metoda vyvolá bad_target výjimku, pokud parametr _PTarget nepředstavuje cíl, který volal reserve.
Metoda consume je podobná accept, ale musí vždy následovat po volání reserve, které vrátí true.
zpracovat_zprávu
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
runtime_object_identity objektu message, který je spotřebováván.
Návratová hodnota
Ukazatel na zprávu, jejíž vlastnictví nyní přebírá volající.
Poznámky
Podobá se accept, ale vždy mu předchází volání reserve.
povolit dávkové zpracování
Povolí dávkové zpracování pro tento blok.
void enable_batched_processing();
inicializovat_zdroj
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ů.
cíl_odkazu
Propojí cílový blok s tímto source_block objektem.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_PTarget
Ukazatel na blok ITarget pro propojení s tímto objektem source_block.
Poznámky
Metoda vyvolá výjimku invalid_argument, pokud se parametr _PTarget rovná NULL.
upozornění_na_cíl_odkazu
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> *);
zpracovat_vstupní_zprávy
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.
šířit_výstupní_zprávy
Šíření zpráv do cílů
virtual void propagate_output_messages();
šířit na všechny cíle
Při přepsání v odvozené třídě předává danou zprávu na libovolné nebo všechny propojené cíle. 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.
verze
Uvolní předchozí úspěšně rezervovanou zprávu.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametry
_MsgId
Rezervovaný objekt runtime_object_identitymessage.
_PTarget
Ukazatel na cílový blok, který volá metodu release .
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je _PTargetparametr NULL .
Metoda vyvolá bad_target výjimku, pokud parametr _PTarget nepředstavuje cíl, který volal reserve.
zpráva o vydání
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čítadlo 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.
odstranit_cíle
Odebere všechny cílové odkazy pro tento zdrojový blok. To by mělo být voláno destruktorem.
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
runtime_object_identity Nabízený message objekt.
_PTarget
Ukazatel na cílový blok, který volá metodu reserve .
Návratová hodnota
true pokud byla zpráva úspěšně rezervována, jinak false. 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 _PTargetparametr NULL .
Jakmile zavoláte reserve, pokud se podaří, musíte zavolat buď consume nebo release pro převzetí nebo vzdání se vlastnictví zprávy.
rezervovat_zprávu
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 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 přepsání v odvozené třídě se po vydání rezervace obnoví šíření.
virtual void resume_propagation() = 0;
source_block
Konstruuje objekt source_block.
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 message objekt, který se má synchronně odeslat.
odpojit_cíl
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 ITarget, který má být odpojen od tohoto objektu source_block.
Poznámky
Metoda vyvolá invalid_argument výjimku, pokud je _PTargetparametr NULL .
odpojit_cíl_oznámení
Zpětné volání, které oznámí, ž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();
čekat_na_vyřízené_asynchronní_odesílání
Čeká na dokončení všech asynchronních šíření. Toto spinové čekání specifické pro propagátory se používá v destruktorech bloků zpráv, aby se zajistilo, že všechny asynchronní propagace mají čas dokončit se před zničením bloku.
void wait_for_outstanding_async_sends();