Sdílet prostřednictvím


multitype_join – třída

multitype_join Blok zasílání zpráv je blok pro více zdrojových zpráv s jedním cílem, který kombinuje zprávy různých typů z jednotlivých zdrojů a nabízí řazenou kolekci sloučených zpráv pro své cíle.

Syntaxe

template<
    typename T,
    join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;

Parametry

T
Typ tuple datové části připojených zpráv a šířený blokem.

_Jtype
Druh join bloku je, buď greedy nebo non_greedy

Členové

Veřejné definice typedef

Jméno popis
type Alias typu pro T.

Veřejné konstruktory

Jméno popis
multitype_join Přetíženo. multitype_join Vytvoří blok zasílání zpráv.
~multitype_join Destruktor multitype_join Zničí blok zasílání zpráv.

Veřejné metody

Jméno popis
Přijmout Přijme zprávu, kterou tento multitype_join blok nabízí, a přenese vlastnictví volajícímu.
acquire_ref Získá referenční počet na tento multitype_join blok zasílání zpráv, aby se zabránilo odstranění.
Konzumovat Využívá dříve nabízenou zprávu blokem multitype_join zasílání zpráv a úspěšně rezervováno cílem a převádí vlastnictví volajícímu.
link_target Pro propojení cílového bloku s tímto multitype_join blokem zasílání zpráv.
Vydání Uvolní předchozí úspěšnou rezervaci zpráv.
release_ref Uvolní referenční počet na tento multiple_join blok zasílání zpráv.
Rezervy Zarezervuje dříve nabízenou zprávu v tomto multitype_join bloku zasílání zpráv.
unlink_target Zruší propojení cílového bloku s tímto multitype_join blokem zasílání zpráv.
unlink_targets Zruší propojení všech cílů z tohoto multitype_join bloku zasílání zpráv. (Přepsání ISource::unlink_targets.)

Poznámky

Další informace naleznete v tématu Asynchronní bloky zpráv.

Hierarchie dědičnosti

ISource

multitype_join

Požadavky

Hlavička: agents.h

Obor názvů: souběžnost

accept

Přijme zprávu, kterou tento multitype_join blok nabízí, a přenese vlastnictví volajícímu.

virtual message<_Destination_type>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_MsgId
message Nabízený runtime_object_identity objekt.

_PTarget
Ukazatel na cílový blok, který volá metodu accept .

Vrácená hodnota

Ukazatel na zprávu, že volající teď má vlastnictví.

acquire_ref

Získá referenční počet na tento multitype_join blok zasílání zpráv, aby se zabránilo odstranění.

virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_PTarget
Ukazatel na cílový blok, který tuto metodu volá.

Poznámky

Tato metoda je volána objektem ITarget , který je propojen s tímto zdrojem během link_target metody.

consume

Využívá dříve nabízenou zprávu blokem multitype_join zasílání zpráv a úspěšně rezervováno cílem a převádí vlastnictví volajícímu.

virtual message<_Destination_type>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_MsgId
Rezervovaný runtime_object_identitymessage objekt.

_PTarget
Ukazatel na cílový blok, který volá metodu consume .

Vrácená hodnota

Ukazatel na message objekt, ke kterému má volající nyní vlastnictví.

Poznámky

Metoda consume je podobná accept, ale musí být vždy před voláním reserve vráceného true.

Pro propojení cílového bloku s tímto multitype_join blokem zasílání zpráv.

virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_PTarget
Ukazatel na blok pro propojení s tímto multitype_join blokem ITarget zasílání zpráv.

multitype_join

multitype_join Vytvoří blok zasílání zpráv.

explicit multitype_join(
    T _Tuple);

multitype_join(
    Scheduler& _PScheduler,
    T _Tuple);

multitype_join(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

multitype_join(
    multitype_join&& _Join);

Parametry

_Tuple
A tuple zdrojů pro tento multitype_join blok zasílání zpráv.

_PScheduler
Objekt Scheduler , ve kterém je naplánována úloha šíření bloku multitype_join zasílání zpráv.

_PScheduleGroup
Objekt ScheduleGroup , ve kterém je naplánována úloha šíření bloku multitype_join zasílání zpráv. Použitý Scheduler objekt je odvozen ze skupiny plánů.

_Připojit
Blok multitype_join zasílání zpráv, ze které se má kopírovat. Všimněte si, že původní objekt je osamocený, takže se jedná o konstruktor přesunutí.

Poznámky

Modul runtime používá výchozí plánovač, pokud nezadáte _PScheduler parametry._PScheduleGroup

Konstrukce přesunu se neprovádí pod zámkem, což znamená, že je na uživateli, aby se zajistilo, že v době pohybu nejsou žádné úkoly s lehkou hmotností. V opačném případě může dojít k mnoha rasám, což vede k výjimkám nebo nekonzistentnímu stavu.

~multitype_join

multitype_join Zničí blok zasílání zpráv.

~multitype_join();

Vydání

Uvolní předchozí úspěšnou rezervaci zpráv.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_MsgId
Uvolnění runtime_object_identity objektu message .

_PTarget
Ukazatel na cílový blok, který volá metodu release .

release_ref

Uvolní referenční počet na tento multiple_join blok zasílání zpráv.

virtual void release_ref(_Inout_ ITarget<_Destination_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.

Rezervy

Zarezervuje dříve nabízenou zprávu v tomto multitype_join bloku zasílání zpráv.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_MsgId
Objekt runtime_object_identity , který message je rezervován.

_PTarget
Ukazatel na cílový blok, který volá metodu reserve .

Vrácená 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

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

Zruší propojení cílového bloku s tímto multitype_join blokem zasílání zpráv.

virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);

Parametry

_PTarget
Ukazatel na blok pro ITarget zrušení propojení s tímto multitype_join blokem zasílání zpráv.

Zruší propojení všech cílů z tohoto multitype_join bloku zasílání zpráv.

virtual void unlink_targets();

Viz také

concurrency – obor názvů
choice – třída
join – třída