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.
template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;
_TargetLinkRegistry
Registre de liens à utiliser pour contenir les liens cibles.
_MessageProcessorType
Type de processeur pour le traitement des messages.
Nom | Description |
---|---|
target_iterator |
Itérateur pour parcourir les cibles connectées. |
Nom | Description |
---|---|
source_block | Construit un objet source_block . |
~source_block Destructeur | Détruit l’objet source_block . |
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.) |
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. |
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.
source_block
En-tête : agents.h
Espace de noms : concurrency
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);
_MsgId
Objet runtime_object_identity
proposé message
.
_PTarget
Pointeur vers le bloc cible appelant la accept
méthode.
Pointeur vers l’objet message
dont l’appelant a désormais la propriété.
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.
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;
_MsgId
Identité de l’objet runtime de l’objet message
.
Pointeur vers le message dont l’appelant a désormais la propriété.
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.
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> *);
Cette méthode est appelée par un ITarget
objet lié à cette source pendant la link_target
méthode.
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);
_Msg
Pointeur vers un message
objet à envoyer de manière asynchrone.
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);
_MsgId
Objet runtime_object_identity
réservé message
.
_PTarget
Pointeur vers le bloc cible appelant la consume
méthode.
Pointeur vers l’objet message
dont l’appelant a désormais la propriété.
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
.
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;
_MsgId
De runtime_object_identity
l’objet message
consommé.
Pointeur vers le message dont l’appelant a désormais la propriété.
Similaire à accept
, mais est toujours précédé d’un appel à reserve
.
Active le traitement par lots pour ce bloc.
void enable_batched_processing();
Initialise le message_propagator
contenu dans ce source_block
fichier .
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
_PScheduler
Planificateur à utiliser pour planifier des tâches.
_PScheduleGroup
Groupe de planification à utiliser pour planifier des tâches.
Lie un bloc cible à cet source_block
objet.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
_PTarget
Pointeur vers un ITarget
bloc à lier à cet source_block
objet.
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
Rappel qui informe qu’une nouvelle cible a été liée à cet source_block
objet.
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
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);
_PMessage
Pointeur vers le message à traiter.
Propagez les messages aux cibles.
virtual void propagate_output_messages();
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);
_PMessage
Pointeur vers le message à propager.
Libère une réservation de message réussie précédente.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
_MsgId
Objet runtime_object_identity
réservé message
.
_PTarget
Pointeur vers le bloc cible appelant la release
méthode.
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
.
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;
_MsgId
De runtime_object_identity
l’objet message
libéré.
Libère un nombre de références sur cet source_block
objet.
virtual void release_ref(_Inout_ ITarget<_Target_type>* _PTarget);
_PTarget
Pointeur vers le bloc cible qui appelle cette méthode.
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.
Supprime tous les liens cibles pour ce bloc source. Cela doit être appelé à partir du destructeur.
void remove_targets();
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);
_MsgId
Objet runtime_object_identity
proposé message
.
_PTarget
Pointeur vers le bloc cible appelant la reserve
méthode.
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.
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.
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;
_MsgId
De runtime_object_identity
l’objet message
réservé.
true
si le message a été correctement réservé, false
sinon.
Une fois reserve
appelé, s’il retourne true
, soit release
consume
doit être appelé pour prendre ou libérer la propriété du message.
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;
Construit un objet source_block
.
source_block();
Détruit l’objet source_block
.
virtual ~source_block();
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);
_Msg
Pointeur vers un message
objet à envoyer de manière synchrone.
Dissocie un bloc cible de cet source_block
objet.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
_PTarget
Pointeur vers un ITarget
bloc pour dissocier de cet source_block
objet.
La méthode lève une exception invalid_argument si le paramètre _PTarget
est NULL
.
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);
_PTarget
Bloc ITarget
qui n’a pas été dissocié.
Dissocie tous les blocs cibles de cet source_block
objet.
virtual void unlink_targets();
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();