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

ISource

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

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.

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.

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 .

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.

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

Viz také

concurrency – obor názvů
třída ISource