source_block, classe
La classe source_block
est une classe de base abstraite pour les blocs sources uniquement. La classe fournit une fonctionnalité de gestion des liens de base ainsi que des vérifications d'erreurs courantes.
Syntaxe
template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;
Paramètres
_TargetLinkRegistry
Registre de liens à utiliser pour contenir les liens cibles.
_MessageProcessorType
Type de processeur pour le traitement des messages.
Membres
Typedefs publics
Nom | Description |
---|---|
target_iterator |
Itérateur pour parcourir les cibles connectées. |
Constructeurs publics
Nom | Description |
---|---|
source_block | Construit un objet source_block . |
~source_block Destructeur | Détruit l’objet source_block . |
Méthodes publiques
Nom | Description |
---|---|
accepter | Accepte un message proposé par cet source_block objet, en transférant la propriété à l’appelant. |
acquire_ref | Acquiert un nombre de références sur cet source_block objet pour empêcher la suppression. |
Utiliser | Consomme un message précédemment proposé par cet source_block objet et correctement réservé par la cible, en transférant la propriété à l’appelant. |
link_target | Lie un bloc cible à cet source_block objet. |
release | Libère une réservation de message réussie précédente. |
release_ref | Libère un nombre de références sur cet source_block objet. |
reserve | Réserve un message précédemment proposé par cet source_block objet. |
unlink_target | Dissocie un bloc cible de cet source_block objet. |
unlink_targets | Dissocie tous les blocs cibles de cet source_block objet. (Remplacements ISource ::unlink_targets.) |
Méthodes protégées
Nom | Description |
---|---|
accept_message | En cas de substitution dans une classe dérivée, accepte un message proposé par la source. Les blocs de messages doivent remplacer cette méthode pour valider et _MsgId retourner un message. |
async_send | Met en file d’attente de manière asynchrone les messages et démarre une tâche de propagation, si cette opération n’a pas déjà été effectuée |
consume_message | En cas de substitution dans une classe dérivée, consomme un message précédemment réservé. |
enable_batched_processing | Active le traitement par lots pour ce bloc. |
initialize_source | Initialise le message_propagator contenu dans ce source_block fichier . |
link_target_notification | Rappel qui informe qu’une nouvelle cible a été liée à cet source_block objet. |
process_input_messages | Traitez les messages d’entrée. Cela n’est utile que pour les blocs de propagation, qui dérivent de source_block |
propagate_output_messages | Propagez les messages aux cibles. |
propagate_to_any_targets | En cas de substitution dans une classe dérivée, propage le message donné à l’une ou l’ensemble des cibles liées. Il s’agit de la routine de propagation principale pour les blocs de messages. |
release_message | En cas de substitution dans une classe dérivée, libère une réservation de message précédente. |
remove_targets | Supprime tous les liens cibles pour ce bloc source. Cela doit être appelé à partir du destructeur. |
reserve_message | En cas de substitution dans une classe dérivée, réserve un message précédemment proposé par cet source_block objet. |
resume_propagation | En cas de substitution dans une classe dérivée, reprend la propagation après la publication d’une réservation. |
sync_send | Met en file d’attente de manière synchrone les messages et démarre une tâche de propagation, si cette opération n’a pas déjà été effectuée. |
unlink_target_notification | Rappel qui avertit qu’une cible a été dissociée de cet source_block objet. |
wait_for_outstanding_async_sends | Attend que toutes les propagations asynchrones se terminent. Cette attente de spin spécifique au propageur est utilisée dans les destructeurs des blocs de messages pour vous assurer que toutes les propagations asynchrones ont le temps de se terminer avant de détruire le bloc. |
Notes
Les blocs de messages doivent dériver de ce bloc pour tirer parti de la gestion et de la synchronisation des liens fournis par cette classe.
Hiérarchie d'héritage
source_block
Spécifications
En-tête : agents.h
Espace de noms : concurrency
accepter
Accepte un message proposé par cet source_block
objet, en transférant la propriété à l’appelant.
virtual message<_Target_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_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 l’objet message
dont l’appelant a désormais la propriété.
Notes
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
La accept
méthode est appelée par une cible pendant qu’un message est proposé par ce ISource
bloc. Le pointeur de message retourné peut être différent de celui passé dans la propagate
méthode du ITarget
bloc, si cette source décide d’effectuer une copie du message.
accept_message
En cas de substitution dans une classe dérivée, accepte un message proposé par la source. Les blocs de messages doivent remplacer cette méthode pour valider et _MsgId
retourner un message.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Paramètres
_MsgId
Identité de l’objet runtime de l’objet message
.
Valeur de retour
Pointeur vers le message dont l’appelant a désormais la propriété.
Notes
Pour transférer la propriété, le pointeur de message d’origine doit être retourné. Pour conserver la propriété, une copie de la charge utile du message doit être effectuée et retournée.
acquire_ref
Acquiert un nombre de références sur cet source_block
objet pour empêcher la suppression.
virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);
Notes
Cette méthode est appelée par un ITarget
objet lié à cette source pendant la link_target
méthode.
async_send
Met en file d’attente de manière asynchrone les messages et démarre une tâche de propagation, si cette opération n’a pas déjà été effectuée
virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);
Paramètres
_Msg
Pointeur vers un message
objet à envoyer de manière asynchrone.
consommer
Consomme un message précédemment proposé par cet source_block
objet et correctement réservé par la cible, en transférant la propriété à l’appelant.
virtual message<_Target_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_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 méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
La méthode lève une exception bad_target si le paramètre _PTarget
ne représente pas la cible appelée reserve
.
La consume
méthode est similaire à accept
, mais doit toujours être précédée d’un appel à reserve
celui retourné true
.
consume_message
En cas de substitution dans une classe dérivée, consomme un message précédemment réservé.
virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;
Paramètres
_MsgId
De runtime_object_identity
l’objet message
consommé.
Valeur de retour
Pointeur vers le message dont l’appelant a désormais la propriété.
Notes
Similaire à accept
, mais est toujours précédé d’un appel à reserve
.
enable_batched_processing
Active le traitement par lots pour ce bloc.
void enable_batched_processing();
initialize_source
Initialise le message_propagator
contenu dans ce source_block
fichier .
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Paramètres
_PScheduler
Planificateur à utiliser pour planifier des tâches.
_PScheduleGroup
Groupe de planification à utiliser pour planifier des tâches.
link_target
Lie un bloc cible à cet source_block
objet.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Paramètres
_PTarget
Pointeur vers un ITarget
bloc à lier à cet source_block
objet.
Notes
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
link_target_notification
Rappel qui informe qu’une nouvelle cible a été liée à cet source_block
objet.
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
process_input_messages
Traitez les messages d’entrée. Cela n’est utile que pour les blocs de propagation, qui dérivent de source_block
virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);
Paramètres
_PMessage
Pointeur vers le message à traiter.
propagate_output_messages
Propagez les messages aux cibles.
virtual void propagate_output_messages();
propagate_to_any_targets
En cas de substitution dans une classe dérivée, propage le message donné à l’une ou l’ensemble des cibles liées. Il s’agit de la routine de propagation principale pour les blocs de messages.
virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);
Paramètres
_PMessage
Pointeur vers le message à propager.
release
Libère une réservation de message réussie précédente.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Paramètres
_MsgId
Objet runtime_object_identity
réservé message
.
_PTarget
Pointeur vers le bloc cible appelant la release
méthode.
Notes
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
La méthode lève une exception bad_target si le paramètre _PTarget
ne représente pas la cible appelée reserve
.
release_message
En cas de substitution dans une classe dérivée, libère une réservation de message précédente.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Paramètres
_MsgId
De runtime_object_identity
l’objet message
libéré.
release_ref
Libère un nombre de références sur cet source_block
objet.
virtual void release_ref(_Inout_ ITarget<_Target_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.
remove_targets
Supprime tous les liens cibles pour ce bloc source. Cela doit être appelé à partir du destructeur.
void remove_targets();
reserve
Réserve un message précédemment proposé par cet source_block
objet.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Paramètres
_MsgId
Objet runtime_object_identity
proposé message
.
_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
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
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.
reserve_message
En cas de substitution dans une classe dérivée, réserve un message précédemment proposé par cet source_block
objet.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
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
En cas de substitution dans une classe dérivée, reprend la propagation après la publication d’une réservation.
virtual void resume_propagation() = 0;
source_block
Construit un objet source_block
.
source_block();
~source_block
Détruit l’objet source_block
.
virtual ~source_block();
sync_send
Met en file d’attente de manière synchrone les messages et démarre une tâche de propagation, si cette opération n’a pas déjà été effectuée.
virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);
Paramètres
_Msg
Pointeur vers un message
objet à envoyer de manière synchrone.
unlink_target
Dissocie un bloc cible de cet source_block
objet.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
Paramètres
_PTarget
Pointeur vers un ITarget
bloc pour dissocier de cet source_block
objet.
Notes
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
unlink_target_notification
Rappel qui avertit qu’une cible a été dissociée de cet source_block
objet.
virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);
Paramètres
_PTarget
Bloc ITarget
qui n’a pas été dissocié.
unlink_targets
Dissocie tous les blocs cibles de cet source_block
objet.
virtual void unlink_targets();
wait_for_outstanding_async_sends
Attend que toutes les propagations asynchrones se terminent. Cette attente de spin spécifique au propageur est utilisée dans les destructeurs des blocs de messages pour vous assurer que toutes les propagations asynchrones ont le temps de se terminer avant de détruire le bloc.
void wait_for_outstanding_async_sends();