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. |
valeur | 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();
valeur
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