Classe source_block
La classe source_block
è una classe base astratta per blocchi di sola origine. La classe fornisce funzionalità di gestione dei collegamenti di base come controlli dell'errore comune.
Sintassi
template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;
Parametri
_TargetLinkRegistry
Registro di sistema dei collegamenti da utilizzare per contenere i collegamenti di destinazione.
_MessageProcessorType
Tipo di processore per l'elaborazione dei messaggi.
Membri
Typedef pubblici
Nome | Descrizione |
---|---|
target_iterator |
Iteratore per percorrere le destinazioni connesse. |
Costruttori pubblici
Nome | Descrizione |
---|---|
source_block | Costruisce un oggetto source_block . |
Distruttore ~source_block | Elimina definitivamente l'oggetto source_block . |
Metodi pubblici
Nome | Descrizione |
---|---|
accettare | Accetta un messaggio offerto da questo source_block oggetto, trasferendo la proprietà al chiamante. |
acquire_ref | Acquisisce un conteggio dei riferimenti su questo source_block oggetto per impedire l'eliminazione. |
utilizzare | Utilizza un messaggio offerto in precedenza da questo source_block oggetto e riservato correttamente dalla destinazione, trasferendo la proprietà al chiamante. |
link_target | Collega un blocco di destinazione a questo source_block oggetto. |
release | Rilascia una prenotazione di messaggi con esito positivo precedente. |
release_ref | Rilascia un conteggio dei riferimenti su questo source_block oggetto. |
reserve | Riserva un messaggio offerto in precedenza da questo source_block oggetto. |
unlink_target | Scollega un blocco di destinazione da questo source_block oggetto. |
unlink_targets | Scollega tutti i blocchi di destinazione da questo source_block oggetto. (sostituzioni )ISource::unlink_targets.) |
Metodi protetti
Nome | Descrizione |
---|---|
accept_message | Quando sottoposto a override in una classe derivata, accetta un messaggio offerto dall'origine. I blocchi di messaggi devono eseguire l'override _MsgId di questo metodo per convalidare e restituire un messaggio. |
async_send | Accoda in modo asincrono i messaggi e avvia un'attività di propagazione, se questa operazione non è già stata eseguita |
consume_message | Quando sottoposto a override in una classe derivata, utilizza un messaggio precedentemente riservato. |
enable_batched_processing | Abilita l'elaborazione batch per questo blocco. |
initialize_source | Inizializza l'oggetto all'interno di message_propagator .source_block |
link_target_notification | Callback che notifica che una nuova destinazione è stata collegata a questo source_block oggetto. |
process_input_messages | Elabora i messaggi di input. Questa operazione è utile solo per i blocchi di propagazione che derivano da source_block |
propagate_output_messages | Propaga messaggi alle destinazioni. |
propagate_to_any_targets | Quando sottoposto a override in una classe derivata, propaga il messaggio specificato a una o a tutte le destinazioni collegate. Questa è la routine di propagazione principale per i blocchi di messaggi. |
release_message | Quando sottoposto a override in una classe derivata, rilascia una prenotazione di messaggi precedente. |
remove_targets | Rimuove tutti i collegamenti di destinazione per questo blocco di origine. Deve essere chiamato dal distruttore. |
reserve_message | Quando sottoposto a override in una classe derivata, riserva un messaggio offerto in precedenza da questo source_block oggetto. |
resume_propagation | Quando sottoposto a override in una classe derivata, riprende la propagazione dopo il rilascio di una prenotazione. |
sync_send | Accoda in modo sincrono i messaggi e avvia un'attività di propagazione, se questa operazione non è già stata eseguita. |
unlink_target_notification | Callback che notifica che una destinazione è stata scollegata da questo source_block oggetto. |
wait_for_outstanding_async_sends | Attende il completamento di tutte le propagazioni asincrone. Questa attesa di rotazione specifica del propagatore viene usata nei distruttori dei blocchi di messaggi per assicurarsi che tutte le propagazioni asincrone abbiano tempo per terminare prima di distruggere il blocco. |
Osservazioni:
I blocchi di messaggi devono derivare da questo blocco per sfruttare la gestione dei collegamenti e la sincronizzazione fornite da questa classe.
Gerarchia di ereditarietà
source_block
Requisiti
Intestazione: agents.h
Spazio dei nomi: Concurrency
accept
Accetta un messaggio offerto da questo source_block
oggetto, trasferendo la proprietà al chiamante.
virtual message<_Target_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto offerto message
.
_PTarget
Puntatore al blocco di destinazione che chiama il accept
metodo .
Valore restituito
Puntatore all'oggetto message
di cui il chiamante ha ora la proprietà.
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget
è NULL
.
Il accept
metodo viene chiamato da una destinazione mentre un messaggio viene offerto da questo ISource
blocco. Il puntatore del messaggio restituito può essere diverso da quello passato al propagate
metodo del ITarget
blocco, se l'origine decide di creare una copia del messaggio.
accept_message
Quando sottoposto a override in una classe derivata, accetta un messaggio offerto dall'origine. I blocchi di messaggi devono eseguire l'override _MsgId
di questo metodo per convalidare e restituire un messaggio.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
Identità dell'oggetto runtime dell'oggetto message
.
Valore restituito
Puntatore al messaggio di cui il chiamante ha ora la proprietà.
Osservazioni:
Per trasferire la proprietà, deve essere restituito il puntatore del messaggio originale. Per mantenere la proprietà, è necessario creare e restituire una copia del payload del messaggio.
acquire_ref
Acquisisce un conteggio dei riferimenti su questo source_block
oggetto per impedire l'eliminazione.
virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);
Osservazioni:
Questo metodo viene chiamato da un ITarget
oggetto collegato a questa origine durante il link_target
metodo .
async_send
Accoda in modo asincrono i messaggi e avvia un'attività di propagazione, se questa operazione non è già stata eseguita
virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);
Parametri
_Msg
Puntatore a un message
oggetto da inviare in modo asincrono.
consume
Utilizza un messaggio offerto in precedenza da questo source_block
oggetto e riservato correttamente dalla destinazione, trasferendo la proprietà al chiamante.
virtual message<_Target_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto riservato message
.
_PTarget
Puntatore al blocco di destinazione che chiama il consume
metodo .
Valore restituito
Puntatore all'oggetto message
di cui il chiamante ha ora la proprietà.
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget
è NULL
.
Il metodo genera un'eccezione bad_target se il parametro _PTarget
non rappresenta la destinazione che ha chiamato reserve
.
Il consume
metodo è simile a accept
, ma deve essere sempre preceduto da una chiamata a reserve
che ha restituito true
.
consume_message
Quando sottoposto a override in una classe derivata, utilizza un messaggio precedentemente riservato.
virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto message
utilizzato.
Valore restituito
Puntatore al messaggio di cui il chiamante ha ora la proprietà.
Osservazioni:
Simile a accept
, ma è sempre preceduto da una chiamata a reserve
.
enable_batched_processing
Abilita l'elaborazione batch per questo blocco.
void enable_batched_processing();
initialize_source
Inizializza l'oggetto all'interno di message_propagator
.source_block
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Parametri
_PScheduler
Utilità di pianificazione da usare per la pianificazione delle attività.
_PScheduleGroup
Gruppo di pianificazione da usare per la pianificazione delle attività.
link_target
Collega un blocco di destinazione a questo source_block
oggetto.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_PTarget
Puntatore a un ITarget
blocco da collegare a questo source_block
oggetto.
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget
è NULL
.
link_target_notification
Callback che notifica che una nuova destinazione è stata collegata a questo source_block
oggetto.
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
process_input_messages
Elabora i messaggi di input. Questa operazione è utile solo per i blocchi di propagazione che derivano da source_block
virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);
Parametri
_PMessage
Puntatore al messaggio da elaborare.
propagate_output_messages
Propaga messaggi alle destinazioni.
virtual void propagate_output_messages();
propagate_to_any_targets
Quando sottoposto a override in una classe derivata, propaga il messaggio specificato a una o a tutte le destinazioni collegate. Questa è la routine di propagazione principale per i blocchi di messaggi.
virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);
Parametri
_PMessage
Puntatore al messaggio da propagare.
release
Rilascia una prenotazione di messaggi con esito positivo precedente.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto riservato message
.
_PTarget
Puntatore al blocco di destinazione che chiama il release
metodo .
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget
è NULL
.
Il metodo genera un'eccezione bad_target se il parametro _PTarget
non rappresenta la destinazione che ha chiamato reserve
.
release_message
Quando sottoposto a override in una classe derivata, rilascia una prenotazione di messaggi precedente.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto message
da rilasciare.
release_ref
Rilascia un conteggio dei riferimenti su questo source_block
oggetto.
virtual void release_ref(_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_PTarget
Puntatore al blocco di destinazione che chiama questo metodo.
Osservazioni:
Questo metodo viene chiamato da un ITarget
oggetto che viene scollegato da questa origine. Il blocco di origine può rilasciare tutte le risorse riservate per il blocco di destinazione.
remove_targets
Rimuove tutti i collegamenti di destinazione per questo blocco di origine. Deve essere chiamato dal distruttore.
void remove_targets();
reserve
Riserva un messaggio offerto in precedenza da questo source_block
oggetto.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto offerto message
.
_PTarget
Puntatore al blocco di destinazione che chiama il reserve
metodo .
Valore restituito
true
se il messaggio è stato riservato correttamente, false
in caso contrario. Le prenotazioni possono avere esito negativo per vari motivi, ad esempio: il messaggio era già riservato o accettato da un'altra destinazione, le prenotazioni potrebbero essere negate dall'origine e così via.
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget
è NULL
.
Dopo aver chiamato reserve
, se ha esito positivo, è necessario chiamare consume
o release
per accettare o rinunciare rispettivamente al possesso del messaggio.
reserve_message
Quando sottoposto a override in una classe derivata, riserva un messaggio offerto in precedenza da questo source_block
oggetto.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
Oggetto runtime_object_identity
dell'oggetto message
riservato.
Valore restituito
true
se il messaggio è stato riservato correttamente, false
in caso contrario.
Osservazioni:
Dopo reserve
la chiamata, se restituisce true
, consume
o release
deve essere chiamato per accettare o rilasciare la proprietà del messaggio.
resume_propagation
Quando sottoposto a override in una classe derivata, riprende la propagazione dopo il rilascio di una prenotazione.
virtual void resume_propagation() = 0;
source_block
Costruisce un oggetto source_block
.
source_block();
~source_block
Elimina definitivamente l'oggetto source_block
.
virtual ~source_block();
sync_send
Accoda in modo sincrono i messaggi e avvia un'attività di propagazione, se questa operazione non è già stata eseguita.
virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);
Parametri
_Msg
Puntatore a un message
oggetto da inviare in modo sincrono.
unlink_target
Scollega un blocco di destinazione da questo source_block
oggetto.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_PTarget
Puntatore a un ITarget
blocco da scollegare da questo source_block
oggetto.
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget
è NULL
.
unlink_target_notification
Callback che notifica che una destinazione è stata scollegata da questo source_block
oggetto.
virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_PTarget
Blocco ITarget
scollegato.
unlink_targets
Scollega tutti i blocchi di destinazione da questo source_block
oggetto.
virtual void unlink_targets();
wait_for_outstanding_async_sends
Attende il completamento di tutte le propagazioni asincrone. Questa attesa di rotazione specifica del propagatore viene usata nei distruttori dei blocchi di messaggi per assicurarsi che tutte le propagazioni asincrone abbiano tempo per terminare prima di distruggere il blocco.
void wait_for_outstanding_async_sends();