multitype_join, classe
Un bloc de messagerie multitype_join
est un bloc de messagerie à sources multiples et à cible unique qui combine des messages de types différents en provenance de chacune de ses sources et qui offre un tuple des messages combinés à ses cibles.
Syntaxe
template<
typename T,
join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;
Paramètres
T
Type tuple
de charge utile des messages joints et propagés par le bloc.
_Jtype
Le type de join
bloc est, soit, soit greedy
non_greedy
Membres
Typedefs publics
Nom | Description |
---|---|
type |
Alias de type pour T . |
Constructeurs publics
Nom | Description |
---|---|
multitype_join | Surcharge. Construit un bloc de messagerie multitype_join . |
~multitype_join Destructeur | Détruit le multitype_join bloc de messagerie. |
Méthodes publiques
Nom | Description |
---|---|
Accepter | Accepte un message proposé par ce multitype_join bloc, en transférant la propriété à l’appelant. |
acquire_ref | Acquiert un nombre de références sur ce multitype_join bloc de messagerie pour empêcher la suppression. |
Utiliser | Consomme un message précédemment proposé par le multitype_join bloc de messagerie et correctement réservé par la cible, en transférant la propriété à l’appelant. |
link_target | Lie un bloc cible à ce multitype_join 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 multiple_join bloc de messagerie. |
reserve | Réserve un message précédemment proposé par ce multitype_join bloc de messagerie. |
unlink_target | Dissocie un bloc cible de ce multitype_join bloc de messagerie. |
unlink_targets | Dissocie toutes les cibles de ce multitype_join bloc de messagerie. (Remplacements ISource ::unlink_targets.) |
Notes
Pour plus d’informations, consultez Blocs de messages asynchrones.
Hiérarchie d'héritage
multitype_join
Spécifications
En-tête : agents.h
Espace de noms : concurrency
accepter
Accepte un message proposé par ce multitype_join
bloc, en transférant la propriété à l’appelant.
virtual message<_Destination_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _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 multitype_join
bloc de messagerie pour empêcher la suppression.
virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _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.
consommer
Consomme un message précédemment proposé par le multitype_join
bloc de messagerie et correctement réservé par la cible, en transférant la propriété à l’appelant.
virtual message<_Destination_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _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
.
link_target
Lie un bloc cible à ce multitype_join
bloc de messagerie.
virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);
Paramètres
_PTarget
Pointeur vers un ITarget
bloc à lier à ce multitype_join
bloc de messagerie.
multitype_join
Construit un bloc de messagerie multitype_join
.
explicit multitype_join(
T _Tuple);
multitype_join(
Scheduler& _PScheduler,
T _Tuple);
multitype_join(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
multitype_join(
multitype_join&& _Join);
Paramètres
_Tuple
tuple
de sources pour ce bloc de messagerie multitype_join
.
_PScheduler
Objet Scheduler
dans lequel la tâche de propagation du bloc de messagerie multitype_join
est planifiée.
_PScheduleGroup
Objet ScheduleGroup
dans lequel la tâche de propagation du bloc de messagerie multitype_join
est planifiée. L’objet Scheduler
utilisé est suggéré par le groupe de planification.
_Rejoindre
Bloc de messagerie multitype_join
à 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.
~multitype_join
Détruit le multitype_join
bloc de messagerie.
~multitype_join();
release
Libère une réservation de message réussie précédente.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _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 multiple_join
bloc de messagerie.
virtual void release_ref(_Inout_ ITarget<_Destination_type>* _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 multitype_join
bloc de messagerie.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _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 multitype_join
bloc de messagerie.
virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);
Paramètres
_PTarget
Pointeur vers un ITarget
bloc pour dissocier de ce multitype_join
bloc de messagerie.
unlink_targets
Dissocie toutes les cibles de ce multitype_join
bloc de messagerie.
virtual void unlink_targets();
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour