Partager via


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

ISource

ITarget

source_block

propagator_block

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.

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