Condividi tramite


Classe source_block

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à

ISource

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

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.

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.

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.

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.

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

Vedi anche

Spazio dei nomi concorrenza
Classe ISource