Partager via


Classe choice

Un bloc de messagerie choice est un bloc à plusieurs sources et à cible unique qui représente une interaction de flux de contrôle avec un jeu de sources. Le bloc choice attend que l'une des multiples sources produise un message et propage l'index de la source qui a généré le message.

Syntaxe

template<
    class T
>
class choice: public ISource<size_t>;

Paramètres

T
Type tuplebasé sur les charges utiles des sources d’entrée.

Membres

Typedefs publics

Nom Description
type Alias de type pour T.

Constructeurs publics

Nom Description
choice Surcharge. Construit un bloc de messagerie choice .
~choice Destructor Détruit le choice bloc de messagerie.

Méthodes publiques

Nom Description
accepter Accepte un message proposé par ce choice bloc, en transférant la propriété à l’appelant.
acquire_ref Acquiert un nombre de références sur ce choice bloc de messagerie pour empêcher la suppression.
Utiliser Consomme un message précédemment proposé par ce choice bloc de messagerie et correctement réservé par la cible, en transférant la propriété à l’appelant.
has_value Vérifie si ce choice bloc de messagerie a été initialisé avec une valeur encore.
index Retourne un index dans le tuple représentant l’élément sélectionné par le choice bloc de messagerie.
link_target Lie un bloc cible à ce choice bloc de messagerie.
release Libère une réservation de message réussie précédente.
release_ref Libère un nombre de références sur ce choice bloc de messagerie.
reserve Réserve un message précédemment proposé par ce choice bloc de messagerie.
unlink_target Dissocie un bloc cible de ce choice bloc de messagerie.
unlink_targets Dissocie toutes les cibles de ce choice bloc de messagerie. (Remplacements ISource ::unlink_targets.)
valeur Obtient le message dont l’index a été sélectionné par le choice bloc de messagerie.

Notes

Le bloc de choix garantit qu’un seul des messages entrants est consommé.

Pour plus d’informations, consultez Blocs de messages asynchrones.

Hiérarchie d'héritage

ISource

choice

Spécifications

En-tête : agents.h

Espace de noms : concurrency

accepter

Accepte un message proposé par ce choice bloc, en transférant la propriété à l’appelant.

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

Paramètres

_MsgId
Objet runtime_object_identity proposé message .

_PTarget
Pointeur vers le bloc cible appelant la accept méthode.

Valeur de retour

Pointeur vers le message dont l’appelant a désormais la propriété.

acquire_ref

Acquiert un nombre de références sur ce choice bloc de messagerie pour empêcher la suppression.

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

Paramètres

_PTarget
Pointeur vers le bloc cible qui appelle cette méthode.

Notes

Cette méthode est appelée par un ITarget objet lié à cette source pendant la link_target méthode.

option

Construit un bloc de messagerie choice .

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

Paramètres

_Tuple
tuple de sources pour choice.

_PScheduler
Objet Scheduler dans lequel la tâche de propagation du bloc de messagerie choice est planifiée.

_PScheduleGroup
Objet ScheduleGroup dans lequel la tâche de propagation du bloc de messagerie choice est planifiée. L’objet Scheduler utilisé est suggéré par le groupe de planification.

_Choix
Bloc de messagerie choice à partir duquel la copie est effectuée. Notez que l’objet d'origine est orphelin, ce qui en fait un constructeur de déplacement.

Notes

Le runtime utilise le planificateur par défaut si vous ne spécifiez pas les paramètres _PScheduler ou _PScheduleGroup .

La construction du déplacement ne s’exécute pas en présence d’un verrou, ce qui signifie que c’est à l’utilisateur de s’assurer qu’il n’y a pas de tâches non activables en vol au moment du déplacement. Sinon, de nombreuses courses peuvent se produire, ce qui aboutit à des exceptions ou à un état incohérent.

~choix

Détruit le choice bloc de messagerie.

~choice();

consommer

Consomme un message précédemment proposé par ce choice bloc de messagerie et correctement réservé par la cible, en transférant la propriété à l’appelant.

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

Paramètres

_MsgId
Objet runtime_object_identity réservé message .

_PTarget
Pointeur vers le bloc cible appelant la consume méthode.

Valeur de retour

Pointeur vers l’objet message dont l’appelant a désormais la propriété.

Notes

La consume méthode est similaire à accept, mais doit toujours être précédée d’un appel à reserve celui retourné true.

has_value

Vérifie si ce choice bloc de messagerie a été initialisé avec une valeur encore.

bool has_value() const;

Valeur de retour

true si le bloc a reçu une valeur, false sinon.

index

Retourne un index dans le tuple représentant l’élément sélectionné par le choice bloc de messagerie.

size_t index();

Valeur de retour

Index du message.

Notes

La charge utile du message peut être extraite à l’aide de la get méthode.

Lie un bloc cible à ce choice bloc de messagerie.

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

Paramètres

_PTarget
Pointeur vers un ITarget bloc à lier à ce choice bloc de messagerie.

release

Libère une réservation de message réussie précédente.

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

Paramètres

_MsgId
De runtime_object_identity l’objet message libéré.

_PTarget
Pointeur vers le bloc cible appelant la release méthode.

release_ref

Libère un nombre de références sur ce choice bloc de messagerie.

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

Paramètres

_PTarget
Pointeur vers le bloc cible qui appelle cette méthode.

Notes

Cette méthode est appelée par un ITarget objet qui n’est pas dissocié de cette source. Le bloc source est autorisé à libérer toutes les ressources réservées au bloc cible.

reserve

Réserve un message précédemment proposé par ce choice bloc de messagerie.

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

Paramètres

_MsgId
De runtime_object_identity l’objet message réservé.

_PTarget
Pointeur vers le bloc cible appelant la reserve méthode.

Valeur de retour

true si le message a été correctement réservé, false sinon. Les réservations peuvent échouer pour de nombreuses raisons, notamment : le message a déjà été réservé ou accepté par une autre cible, la source peut refuser les réservations, etc.

Notes

Une fois l’appel reserveeffectué, s’il réussit, vous devez appeler l’un consume release ou l’autre pour prendre ou abandonner la possession du message, respectivement.

Dissocie un bloc cible de ce choice bloc de messagerie.

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

Paramètres

_PTarget
Pointeur vers un ITarget bloc pour dissocier de ce choice bloc de messagerie.

Dissocie toutes les cibles de ce choice bloc de messagerie.

virtual void unlink_targets();

Notes

Cette méthode n’a pas besoin d’être appelée à partir du destructeur, car le destructeur du bloc interne single_assignment dissocie correctement.

valeur

Obtient le message dont l’index a été sélectionné par le choice bloc de messagerie.

template <
    typename _Payload_type
>
_Payload_type const& value();

Paramètres

_Payload_type
Type de la charge utile du message.

Valeur de retour

Charge utile du message.

Notes

Étant donné qu’un choice bloc de messagerie peut prendre des entrées avec différents types de charge utile, vous devez spécifier le type de la charge utile au moment de la récupération. Vous pouvez déterminer le type en fonction du résultat de la index méthode.

Voir aussi

accès concurrentiel Namespace
join, classe
single_assignment, classe