Partager via


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_blockfichier .
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

ISource

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_blockfichier .

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.

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.

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 reserveeffectué, 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.

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.

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é.

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

Voir aussi

accès concurrentiel Namespace
ISource, classe