Share via


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à

ISource

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

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.

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.

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.

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.

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

Vedi anche

Spazio dei nomi concurrency
Classe ISource