Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La classe source_block è una classe base astratta per blocchi di sola origine. La classe fornisce funzionalità di gestione di base dei collegamenti e controlli comuni degli errori.
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 collegamenti da utilizzare per contenere i link 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 di ~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. |
| consumare | Utilizza un messaggio precedentemente offerto da questo source_block oggetto e riservato con successo 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. (Sovrascrive ISource::unlink_targets.) |
Metodi protetti
| Nome | Descrizione |
|---|---|
| accetta_messaggio | Quando viene eseguito l'override in una classe derivata, accetta un messaggio proveniente dall'origine. I blocchi di messaggi dovrebbero eseguire l'override di questo metodo _MsgId 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 sovrascritto in una classe derivata, utilizza un messaggio precedentemente riservato. |
| enable_batched_processing | Abilita l'elaborazione batch per questo blocco. |
| initialize_source | Inizializza il message_propagator all'interno di 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 | Propagare messaggi agli obiettivi. |
| propaga_a_qualsiasi_destinazione | 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 sovrascritto in una classe derivata, rilascia una precedente prenotazione di messaggi. |
| remove_targets | Rimuove tutti i collegamenti di destinazione per questo blocco di origine. Deve essere invocato dal distruttore. |
| messaggio_di_riserva | Quando sovrascritto in una classe derivata, riserva un messaggio precedentemente offerto da questo oggetto source_block. |
| resume_propagation | Quando viene eseguito l'override in una classe derivata, riprende la propagazione dopo il rilascio di una prenotazione. |
| sync_send | Accoda i messaggi in modo sincrono e avvia un'attività di propagazione, se non è già stata eseguita questa operazione. |
| notifica_disconnessione_destinazione | 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
accettare
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
L'oggetto runtime_object_identity dell'offerta message.
_PTarget
Puntatore al blocco di destinazione che chiama il metodo accept.
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ò differire da quello passato al metodo propagate del blocco ITarget se questa origine decide di fare una copia del messaggio.
accetta_messaggio
Quando viene eseguito l'override in una classe derivata, accetta un messaggio proveniente dall'origine. I blocchi di messaggi dovrebbero eseguire l'override di questo metodo _MsgId per convalidare e restituire un messaggio.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
L'identità 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 oggetto message da inviare in modo asincrono.
consumare
Utilizza un messaggio precedentemente offerto da questo source_block oggetto e riservato con successo dalla destinazione, trasferendo la proprietà al chiamante.
virtual message<_Target_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_MsgId
La runtime_object_identity dell'oggetto riservato message.
_PTarget
Puntatore al blocco di destinazione che chiama il metodo consume.
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 sovrascritto in una classe derivata, utilizza un messaggio precedentemente riservato.
virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
Il runtime_object_identity dell'oggetto message che viene consumato.
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.
abilita_elaborazione_batch
Abilita l'elaborazione batch per questo blocco.
void enable_batched_processing();
inizializza_sorgente
Inizializza il message_propagator all'interno di source_block.
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Parametri
_PScheduler
Il pianificatore da utilizzare 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.
notifica_destinazione_link
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.
propagare_messaggi_uscita
Propagare messaggi agli obiettivi.
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.
rilascio
Rilascia una prenotazione di messaggi con esito positivo precedente.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parametri
_MsgId
La runtime_object_identity dell'oggetto riservato message.
_PTarget
Puntatore al blocco di destinazione che chiama il metodo release.
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.
messaggio_di_rilascio
Quando sovrascritto in una classe derivata, rilascia una precedente prenotazione di messaggi.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
runtime_object_identity dell'oggetto message che viene rilasciato.
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 invocato dal distruttore.
void remove_targets();
riserva
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
L'oggetto runtime_object_identity dell'offerta message.
_PTarget
Puntatore al blocco di destinazione che chiama il metodo reserve.
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.
messaggio_di_riserva
Quando sovrascritto in una classe derivata, riserva un messaggio precedentemente offerto da questo oggetto source_block.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
Parametri
_MsgId
Elemento runtime_object_identity dell'oggetto message riservato.
Valore restituito
true se il messaggio è stato riservato correttamente, false in caso contrario.
Osservazioni:
Dopo che reserve è stato chiamato, se restituisce true, devono essere chiamati consume o release per prendere o rilasciare la proprietà del messaggio.
resume_propagation
Quando viene eseguito l'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();
sincronizzare_invio
Accoda i messaggi in modo sincrono e avvia un'attività di propagazione, se non è già stata eseguita questa operazione.
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
Il puntatore a un blocco ITarget da scollegare da questo oggetto source_block.
Osservazioni:
Il metodo genera un'eccezione invalid_argument se il parametro _PTarget è NULL.
notifica_scollegamento_obiettivo
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
Il blocco ITarget che è stato scollegato.
unlink_targets
Scollega tutti i blocchi di destinazione da questo source_block oggetto.
virtual void unlink_targets();
attendi_per_invio_asincroni_in_sospeso
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();