Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Mitglieder
Ö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. |
| referenz_erwerben | Dient zum Abrufen einer Verweisanzahl für diesen choice Nachrichtenblock, um das Löschen zu verhindern. |
| Verbrauchen | Nutzt eine Nachricht, die zuvor von diesem choice Messaging-Block angeboten und erfolgreich vom Ziel reserviert wurde, und überträgt den Besitz an die aufrufende Entität. |
| has_value | Überprüft, ob dieser choice Nachrichtenblock bisher mit einem Wert initialisiert wurde. |
| Index | Gibt einen Index in das tuple zurück, der das vom Nachrichtenblock ausgewählte Element choice darstellt. |
| link_target | Verknüpft einen Zielblock mit diesem choice Messaging-Block. |
| Freigabe | Löst eine vorherige erfolgreiche Nachrichtenreservierung auf. |
| 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 | Entfernt die Verknüpfung aller Ziele von diesem choice Nachrichtenblock. (Überschreibt ISource::unlink_targets.) |
| value | Erhält die Nachricht, 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
Eine tuple von Quellen zur 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.
Move-Konstruktionen werden nicht unter einer Sperre ausgeführt, d. h., es liegt in der Verantwortung des Benutzers sicherzustellen, dass zum Zeitpunkt der Verschiebung keine leichten Aufgaben im Gange sind. Andernfalls können zahlreiche Wettläufe auftreten, wodurch Ausnahmen oder inkonsistente Zuständen verursacht werden.
~Wahl
Zerstört den choice Nachrichtenblock.
~choice();
verbrauchen
Nutzt eine Nachricht, die zuvor von diesem choice Messaging-Block angeboten und erfolgreich vom Ziel reserviert wurde, und überträgt den Besitz an die aufrufende Entität.
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 von einem Aufruf an reserve begleitet werden, der true zurückgegeben hat.
hat_Wert
Überprüft, ob dieser choice Nachrichtenblock bisher 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 zurück, der das vom Nachrichtenblock ausgewählte Element choice darstellt.
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
Löst eine vorherige erfolgreiche Nachrichtenreservierung auf.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parameter
_MsgId
Das runtime_object_identity des message Objekts, das 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 entkoppelt 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 kann Reservierungen ablehnen, und so weiter.
Hinweise
Nach dem Aufrufen von reserve, wenn dies erfolgreich ist, müssen Sie entweder consume aufrufen oder release, um die Nachricht zu übernehmen oder abzugeben.
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.
Zielverknüpfungen aufheben
Entfernt die Verknüpfung aller Ziele von diesem choice Nachrichtenblock.
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.
Wert
Erhält die Nachricht, 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.