multitype_join-Klasse

Ein multitype_join-Meldungsblock ist ein Block mit mehreren Quellen und einem einzelnen Ziel, der Meldungen verschiedener Typen aus allen Quellen kombiniert und dem Ziel ein Tupel der kombinierten Meldungen bereitstellt.

Syntax

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

Parameter

T
Der tuple Nutzlasttyp der nachrichten, die vom Block verknüpft und weitergegeben werden.

_Jtype
Die Art des join Blocks ist dies entweder greedy oder non_greedy

Member

Öffentliche Typedefs

Name Beschreibung
type Ein Typalias für T.

Öffentliche Konstruktoren

Name Beschreibung
Multitype_join Überladen. Erstellt einen multitype_join -Meldungsblock.
~multitype_join Destruktor Zerstört den multitype_join Nachrichtenblock.

Öffentliche Methoden

Name Beschreibung
Akzeptieren Akzeptiert eine Nachricht, die von diesem multitype_join Block angeboten wurde, und überträgt den Besitz an den Anrufer.
acquire_ref Dient zum Abrufen einer Verweisanzahl für diesen multitype_join Nachrichtenblock, um das Löschen zu verhindern.
Nutzen Nutzt eine Nachricht, die multitype_join zuvor vom Nachrichtenblock angeboten und erfolgreich vom Ziel reserviert wurde und den Besitz an den Anrufer überträgt.
link_target Verknüpft einen Zielblock mit diesem multitype_join Messaging-Block.
release Veröffentlicht eine vorherige erfolgreiche Nachrichtenreservierung.
release_ref Gibt eine Referenzanzahl für diesen multiple_join Messaging-Block frei.
reserve Reserviert eine Nachricht, die zuvor von diesem multitype_join Nachrichtenblock angeboten wurde.
unlink_target Hebt die Verknüpfung eines Zielblocks von diesem multitype_join Nachrichtenblock auf.
unlink_targets Hebt die Verknüpfung aller Ziele von diesem multitype_join Nachrichtenblock auf. (Außerkraftsetzungen ISource::unlink_targets.)

Hinweise

Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".

Vererbungshierarchie

Isource

multitype_join

Anforderungen

Header: agents.h

Namespace: Parallelität

Akzeptieren

Akzeptiert eine Nachricht, die von diesem multitype_join Block angeboten wurde, und überträgt den Besitz an den Anrufer.

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

Parameter

_Msgid
Das runtime_object_identity angebotene message Objekt.

_PTarget
Ein Zeiger auf den Zielblock, der die accept Methode aufruft.

Rückgabewert

Ein Zeiger auf die Nachricht, deren Besitzer der Aufrufer jetzt ist.

acquire_ref

Dient zum Abrufen einer Verweisanzahl für diesen multitype_join Nachrichtenblock, um das Löschen zu verhindern.

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

Parameter

_PTarget
Ein Zeiger auf den Zielblock, der diese Methode aufruft.

Hinweise

Diese Methode wird von einem ITarget Objekt aufgerufen, das während der link_target Methode mit dieser Quelle verknüpft wird.

nutzen

Nutzt eine Nachricht, die multitype_join zuvor vom Nachrichtenblock angeboten und erfolgreich vom Ziel reserviert wurde und den Besitz an den Anrufer überträgt.

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

Parameter

_Msgid
Das runtime_object_identity reservierte message Objekt.

_PTarget
Ein Zeiger auf den Zielblock, der die consume Methode aufruft.

Rückgabewert

Ein Zeiger auf das message Objekt, dessen Besitzer der Aufrufer jetzt ist.

Hinweise

Die consume Methode ähnelt accept, muss jedoch immer einem Aufruf dieser reserve zurückgegebenen Methode truevorangestellt werden.

Verknüpft einen Zielblock mit diesem multitype_join Messaging-Block.

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

Parameter

_PTarget
Ein Zeiger auf einen ITarget Block zum Verknüpfen mit diesem multitype_join Nachrichtenblock.

Multitype_join

Erstellt einen multitype_join -Meldungsblock.

explicit multitype_join(
    T _Tuple);

multitype_join(
    Scheduler& _PScheduler,
    T _Tuple);

multitype_join(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

multitype_join(
    multitype_join&& _Join);

Parameter

_Tupel
Ein tuple von Quellen für diesen multitype_join -Meldungsblock.

_PScheduler
Das Scheduler -Objekt, in dem die Weiterleitungsaufgabe für den multitype_join -Meldungsblock geplant ist.

_PScheduleGroup
Das ScheduleGroup -Objekt, in dem die Weiterleitungsaufgabe für den multitype_join -Meldungsblock geplant ist. Das verwendete Scheduler -Objekt wird von der Planungsgruppe impliziert.

_Beitreten
Ein multitype_join -Meldungsblock, aus dem kopiert werden soll. Beachten Sie, dass das ursprüngliche Objekt verwaist ist, sodass dies ein Bewegungskonstruktor ist.

Hinweise

Die Runtime verwendet das Standardplanungsprogramm, wenn Sie den _PScheduler -Parameter oder den _PScheduleGroup -Parameter nicht angeben.

Bewegungskonstruktion wird bei einer aktiven Sperre nicht ausgeführt, d. h., der Benutzer muss sicherstellen, dass zum Zeitpunkt der Bewegung keine einfachen Aufgaben aktiv sind. Andernfalls können zahlreiche Wettläufe auftreten, wodurch Ausnahmen oder inkonsistente Zuständen verursacht werden.

~Multitype_join

Zerstört den multitype_join Nachrichtenblock.

~multitype_join();

Freigabe

Veröffentlicht eine vorherige erfolgreiche Nachrichtenreservierung.

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

Parameter

_Msgid
Das runtime_object_identity Objekt, das message freigegeben wird.

_PTarget
Ein Zeiger auf den Zielblock, der die release Methode aufruft.

release_ref

Gibt eine Referenzanzahl für diesen multiple_join Messaging-Block frei.

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

Parameter

_PTarget
Ein Zeiger auf den Zielblock, der diese Methode aufruft.

Hinweise

Diese Methode wird von einem ITarget Objekt aufgerufen, das von dieser Quelle nicht verknüpft wird. Der Quellblock darf alle Ressourcen freigeben, die für den Zielblock reserviert sind.

Reserve

Reserviert eine Nachricht, die zuvor von diesem multitype_join Nachrichtenblock angeboten wurde.

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

Parameter

_Msgid
Das runtime_object_identity Objekt, das message reserviert wird.

_PTarget
Ein Zeiger auf den Zielblock, der die reserve Methode aufruft.

Rückgabewert

true wenn die Nachricht erfolgreich reserviert wurde, false andernfalls. Reservierungen können aus vielen Gründen fehlschlagen, einschließlich: Die Nachricht wurde bereits von einem anderen Ziel reserviert oder akzeptiert, die Quelle konnte Vorbehalte verweigern usw.

Hinweise

Nach dem Anruf reservemüssen Sie, falls dies erfolgreich ist, entweder consume anrufen, oder release um den Besitz der Nachricht zu übernehmen oder aufzugeben.

Hebt die Verknüpfung eines Zielblocks von diesem multitype_join Nachrichtenblock auf.

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

Parameter

_PTarget
Ein Zeiger auf einen ITarget Block, um die Verknüpfung von diesem multitype_join Nachrichtenblock aufzuheben.

Hebt die Verknüpfung aller Ziele von diesem multitype_join Nachrichtenblock auf.

virtual void unlink_targets();

Siehe auch

Concurrency-Namespace
choice-Klasse
join-Klasse