Sdílet prostřednictvím


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

ISource

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 NULLparametr _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 NULLparametr _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

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

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 NULLparametr _PTarget .

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 NULLparametr _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 NULLparametr _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.

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 NULLparametr _PTarget .

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.

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

Viz také

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