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 tuple
basé 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
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.
link_target
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 reserve
effectué, s’il réussit, vous devez appeler l’un consume
release
ou l’autre pour prendre ou abandonner la possession du message, respectivement.
unlink_target
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.
unlink_targets
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