Classe single_assignment
Un bloc de messagerie single_assignment
est un propagator_block
à cibles multiples, à sources multiples et ordonné, capable de stocker un message
unique écrit une seule fois.
Syntaxe
template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Paramètres
T
Type de charge utile du message stocké et propagé par la mémoire tampon.
Membres
Constructeurs publics
Nom | Description |
---|---|
single_assignment | Surcharge. Construit un bloc de messagerie single_assignment . |
~single_assignment Destructeur | Détruit le single_assignment bloc de messagerie. |
Méthodes publiques
Nom | Description |
---|---|
has_value | Vérifie si ce single_assignment bloc de messagerie a été initialisé avec une valeur encore. |
value | Obtient une référence à la charge utile actuelle du message stocké dans le single_assignment bloc de messagerie. |
Méthodes protégées
Nom | Description |
---|---|
accept_message | Accepte un message proposé par ce single_assignment bloc de messagerie, renvoyant une copie du message à l’appelant. |
consume_message | Consomme un message précédemment proposé par la single_assignment cible et réservé par la cible, renvoyant une copie du message à l’appelant. |
link_target_notification | Rappel qui informe qu’une nouvelle cible a été liée à ce single_assignment bloc de messagerie. |
propagate_message | Transmet de façon asynchrone un message d’un ISource bloc à ce single_assignment bloc de messagerie. Elle est appelée par la propagate méthode, lorsqu’elle est appelée par un bloc source. |
propagate_to_any_targets | Place le message _PMessage bloc de messagerie dans ce single_assignment bloc de messagerie et l’offre à toutes les cibles liées. |
release_message | Libère une réservation de message précédente. (Remplace source_block ::release_message.) |
reserve_message | Réserve un message précédemment proposé par ce single_assignment bloc de messagerie. (Remplace source_block ::reserve_message.) |
resume_propagation | Reprend la propagation après la publication d’une réservation. (Remplace source_block ::resume_propagation.) |
send_message | Transmet de façon synchrone un message d’un ISource bloc à ce single_assignment bloc de messagerie. Elle est appelée par la send méthode, lorsqu’elle est appelée par un bloc source. |
Notes
Un single_assignment
bloc de messagerie propage des copies de son message à chaque cible.
Pour plus d’informations, consultez Blocs de messages asynchrones.
Hiérarchie d'héritage
single_assignment
Spécifications
En-tête : agents.h
Espace de noms : concurrency
accept_message
Accepte un message proposé par ce single_assignment
bloc de messagerie, renvoyant une copie du message à l’appelant.
virtual message<T>* accept_message(runtime_object_identity _MsgId);
Paramètres
_MsgId
Objet runtime_object_identity
proposé message
.
Valeur de retour
Pointeur vers l’objet message
dont l’appelant a désormais la propriété.
Notes
Le single_assignment
bloc de messagerie retourne des copies du message à ses cibles, plutôt que de transférer la propriété du message actuellement conservé.
consume_message
Consomme un message précédemment proposé par la single_assignment
cible et réservé par la cible, renvoyant une copie du message à l’appelant.
virtual message<T>* consume_message(runtime_object_identity _MsgId);
Paramètres
_MsgId
De runtime_object_identity
l’objet message
consommé.
Valeur de retour
Pointeur vers l’objet message
dont l’appelant a désormais la propriété.
Notes
Similaire à accept
, mais est toujours précédé d’un appel à reserve
.
has_value
Vérifie si ce single_assignment
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.
link_target_notification
Rappel qui informe qu’une nouvelle cible a été liée à ce single_assignment
bloc de messagerie.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Paramètres
_PTarget
Pointeur vers la cible nouvellement liée.
propagate_message
Transmet de façon asynchrone un message d’un ISource
bloc à ce single_assignment
bloc de messagerie. Elle est appelée par la propagate
méthode, lorsqu’elle est appelée par un bloc source.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Paramètres
_PMessage
Pointeur vers l'objet message
.
_PSource
Pointeur vers le bloc source offrant le message.
Valeur de retour
Une message_status indication de ce que la cible a décidé de faire avec le message.
propagate_to_any_targets
Place le message
_PMessage
bloc de messagerie dans ce single_assignment
bloc de messagerie et l’offre à toutes les cibles liées.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Paramètres
_PMessage
Pointeur vers un pointeur vers lequel message
ce single_assignment
bloc de messagerie a pris possession.
release_message
Libère une réservation de message précédente.
virtual void release_message(runtime_object_identity _MsgId);
Paramètres
_MsgId
De runtime_object_identity
l’objet message
libéré.
reserve_message
Réserve un message précédemment proposé par ce single_assignment
bloc de messagerie.
virtual bool reserve_message(runtime_object_identity _MsgId);
Paramètres
_MsgId
De runtime_object_identity
l’objet message
réservé.
Valeur de retour
true
si le message a été correctement réservé, false
sinon.
Notes
Une fois reserve
appelé, s’il retourne true
, soit release
consume
doit être appelé pour prendre ou libérer la propriété du message.
resume_propagation
Reprend la propagation après la publication d’une réservation.
virtual void resume_propagation();
send_message
Transmet de façon synchrone un message d’un ISource
bloc à ce single_assignment
bloc de messagerie. Elle est appelée par la send
méthode, lorsqu’elle est appelée par un bloc source.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Paramètres
_PMessage
Pointeur vers l'objet message
.
_PSource
Pointeur vers le bloc source offrant le message.
Valeur de retour
Une message_status indication de ce que la cible a décidé de faire avec le message.
single_assignment
Construit un bloc de messagerie single_assignment
.
single_assignment();
single_assignment(
filter_method const& _Filter);
single_assignment(
Scheduler& _PScheduler);
single_assignment(
Scheduler& _PScheduler,
filter_method const& _Filter);
single_assignment(
ScheduleGroup& _PScheduleGroup);
single_assignment(
ScheduleGroup& _PScheduleGroup,
filter_method const& _Filter);
Paramètres
_Filtre
Fonction de filtre qui détermine si les messages proposés doivent être acceptés.
_PScheduler
Objet Scheduler
dans lequel la tâche de propagation du bloc de messagerie single_assignment
est planifiée.
_PScheduleGroup
Objet ScheduleGroup
dans lequel la tâche de propagation du bloc de messagerie single_assignment
est planifiée. L’objet Scheduler
utilisé est suggéré par le groupe de planification.
Notes
Le runtime utilise le planificateur par défaut si vous ne spécifiez pas les paramètres _PScheduler
ou _PScheduleGroup
.
Le type filter_method
est un fonctor avec signature bool (T const &)
qui est appelé par ce single_assignment
bloc de messagerie pour déterminer s’il doit accepter ou non un message proposé.
~single_assignment
Détruit le single_assignment
bloc de messagerie.
~single_assignment();
value
Obtient une référence à la charge utile actuelle du message stocké dans le single_assignment
bloc de messagerie.
T const& value();
Valeur de retour
Charge utile du message stocké.
Notes
Cette méthode attend qu’un message arrive si aucun message n’est actuellement stocké dans le bloc de single_assignment
messagerie.
Voir aussi
accès concurrentiel Namespace
overwrite_buffer, classe
Classe unbounded_buffer
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