choice-Klasse
Ein choice
-Meldungsblock ist ein Block mit mehreren Quellen und einem einzelnen Ziel, der eine Kontrollflussinteraktion zwischen mehreren Quellen darstellt. Der Auswahlblock wartet, bis eine von mehreren Quellen eine Meldung erzeugt, und gibt den Index der Quelle, von der die Meldung erzeugt wurde, weiter.
Syntax
template<
class T
>
class choice: public ISource<size_t>;
Parameter
T
Ein tuple
-basierter Typ, der die Nutzlasten der Eingabequellen darstellt.
Member
Öffentliche Typedefs
Name | Beschreibung |
---|---|
type |
Ein Typalias für T . |
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
choice | Überladen. Erstellt einen choice -Meldungsblock. |
~choice Destructor | Zerstört den choice Nachrichtenblock. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
annehmen | Akzeptiert eine Nachricht, die von diesem choice Block angeboten wurde, und überträgt den Besitz an den Anrufer. |
acquire_ref | Dient zum Abrufen einer Verweisanzahl für diesen choice Nachrichtenblock, um das Löschen zu verhindern. |
Nutzen | Nutzt eine Nachricht, die zuvor von diesem choice Messaging-Block angeboten wurde und erfolgreich vom Ziel reserviert wurde und den Besitz an den Anrufer überträgt. |
has_value | Überprüft, ob dieser choice Nachrichtenblock mit einem Wert initialisiert wurde. |
Index | Gibt einen Index in das tuple vom Nachrichtenblock ausgewählte choice Element zurück. |
link_target | Verknüpft einen Zielblock mit diesem choice Messaging-Block. |
release | Veröffentlicht eine vorherige erfolgreiche Nachrichtenreservierung. |
release_ref | Gibt eine Referenzanzahl für diesen choice Messaging-Block frei. |
reserve | Reserviert eine Nachricht, die zuvor von diesem choice Nachrichtenblock angeboten wurde. |
unlink_target | Hebt die Verknüpfung eines Zielblocks von diesem choice Nachrichtenblock auf. |
unlink_targets | Hebt die Verknüpfung aller Ziele von diesem choice Nachrichtenblock auf. (Außerkraftsetzungen ISource::unlink_targets.) |
value | Ruft die Nachricht ab, deren Index vom choice Nachrichtenblock ausgewählt wurde. |
Hinweise
Der Auswahlblock stellt sicher, dass nur eine der eingehenden Nachrichten genutzt wird.
Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".
Vererbungshierarchie
choice
Anforderungen
Header: agents.h
Namespace: Parallelität
Akzeptieren
Akzeptiert eine Nachricht, die von diesem choice
Block angeboten wurde, und überträgt den Besitz an den Anrufer.
virtual message<size_t>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _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 choice
Nachrichtenblock, um das Löschen zu verhindern.
virtual void acquire_ref(_Inout_ ITarget<size_t>* _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.
Option
Erstellt einen choice
-Meldungsblock.
explicit choice(
T _Tuple);
choice(
Scheduler& _PScheduler,
T _Tuple);
choice(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
choice(
choice&& _Choice);
Parameter
_Tupel
Ein tuple
von Quellen für die Auswahl.
_PScheduler
Das Scheduler
-Objekt, in dem die Weiterleitungsaufgabe für den choice
-Meldungsblock geplant ist.
_PScheduleGroup
Das ScheduleGroup
-Objekt, in dem die Weiterleitungsaufgabe für den choice
-Meldungsblock geplant ist. Das verwendete Scheduler
-Objekt wird von der Planungsgruppe impliziert.
_Wahl
Ein choice
-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.
~Wahl
Zerstört den choice
Nachrichtenblock.
~choice();
nutzen
Nutzt eine Nachricht, die zuvor von diesem choice
Messaging-Block angeboten wurde und erfolgreich vom Ziel reserviert wurde und den Besitz an den Anrufer überträgt.
virtual message<size_t>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _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 true
vorangestellt werden.
has_value
Überprüft, ob dieser choice
Nachrichtenblock mit einem Wert initialisiert wurde.
bool has_value() const;
Rückgabewert
true
wenn der Block einen Wert erhalten hat, false
andernfalls.
Index
Gibt einen Index in das tuple
vom Nachrichtenblock ausgewählte choice
Element zurück.
size_t index();
Rückgabewert
Der Nachrichtenindex.
Hinweise
Die Nachrichtennutzlast kann mithilfe der get
Methode extrahiert werden.
link_target
Verknüpft einen Zielblock mit diesem choice
Messaging-Block.
virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);
Parameter
_PTarget
Ein Zeiger auf einen ITarget
Block zum Verknüpfen mit diesem choice
Nachrichtenblock.
Freigabe
Veröffentlicht eine vorherige erfolgreiche Nachrichtenreservierung.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _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 choice
Messaging-Block frei.
virtual void release_ref(_Inout_ ITarget<size_t>* _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 choice
Nachrichtenblock angeboten wurde.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _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 reserve
müssen Sie, falls dies erfolgreich ist, entweder consume
anrufen, oder release
um den Besitz der Nachricht zu übernehmen oder aufzugeben.
unlink_target
Hebt die Verknüpfung eines Zielblocks von diesem choice
Nachrichtenblock auf.
virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);
Parameter
_PTarget
Ein Zeiger auf einen ITarget
Block, um die Verknüpfung von diesem choice
Nachrichtenblock aufzuheben.
unlink_targets
Hebt die Verknüpfung aller Ziele von diesem choice
Nachrichtenblock auf.
virtual void unlink_targets();
Hinweise
Diese Methode muss nicht vom Destruktor aufgerufen werden, da der Destruktor für den internen single_assignment
Block die Verknüpfung ordnungsgemäß aufheben wird.
value
Ruft die Nachricht ab, deren Index vom choice
Nachrichtenblock ausgewählt wurde.
template <
typename _Payload_type
>
_Payload_type const& value();
Parameter
_Payload_type
Der Typ der Nachrichtennutzlast.
Rückgabewert
Die Nutzlast der Nachricht.
Hinweise
Da ein choice
Messagingblock Eingaben mit unterschiedlichen Nutzlasttypen annehmen kann, müssen Sie den Typ der Nutzlast am Abrufpunkt angeben. Sie können den Typ basierend auf dem Ergebnis der index
Methode bestimmen.