Condividi tramite


Classe target_block

La classe target_block corrisponde a una classe base astratta che mette a disposizione la funzionalità di gestione dei collegamenti di base e il controllo degli errori per blocchi di sola destinazione.

Sintassi

template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;

Parametri

_SourceLinkRegistry
Registro dei collegamenti da utilizzare per mantenere i collegamenti di origine.

_MessageProcessorType
Tipo di processore per l'elaborazione dei messaggi.

Membri

Typedef pubblici

Nome Descrizione
source_iterator Tipo dell'iteratore per l'oggetto source_link_manager per questo target_block oggetto.

Costruttori pubblici

Nome Descrizione
target_block Costruisce un oggetto target_block.
~target_block Distruttore Elimina definitivamente l'oggetto target_block .

Metodi pubblici

Nome Descrizione
propagare Passa in modo asincrono un messaggio da un blocco di origine a questo blocco di destinazione.
send Passa in modo sincrono un messaggio da un blocco di origine a questo blocco di destinazione.

Metodi protetti

Nome Descrizione
async_send Invia in modo asincrono un messaggio per l'elaborazione.
rifiuta_messaggi_in_arrivo Indica al blocco che i nuovi messaggi devono essere rifiutati.
enable_batched_processing Abilita l'elaborazione batch per questo blocco.
initialize_target Inizializza l'oggetto di base. In particolare, l'oggetto message_processor deve essere inizializzato.
link_source Collega un blocco di origine specificato a questo target_block oggetto.
process_input_messages Elabora i messaggi ricevuti come input.
process_message Quando sottoposto a override in una classe derivata, elabora un messaggio che è stato accettato dall'oggetto target_block.
propagate_message Quando sottoposto a override in una classe derivata, questo metodo passa in modo asincrono un messaggio da un ISource blocco a questo target_block oggetto. Viene richiamato dal propagate metodo , quando viene chiamato da un blocco di origine.
register_filter Registra un metodo di filtro che verrà richiamato in ogni messaggio ricevuto.
rimuovi_fonti Scollega tutte le fonti dopo aver atteso il completamento delle operazioni di invio asincrone in sospeso.
send_message Quando sottoposto a override in una classe derivata, questo metodo passa in modo sincrono un messaggio da un ISource blocco a questo target_block oggetto. Viene richiamato dal send metodo , quando viene chiamato da un blocco di origine.
sync_send Inviare in modo sincrono un messaggio per l'elaborazione.
unlink_source Disconnette un blocco di origine specificato da questo oggetto target_block.
unlink_sources Scollega tutti i blocchi di origine da questo target_block oggetto. (Sovrascrive ITarget::unlink_sources.)
wait_for_async_sends Attende il completamento di tutte le propagazioni asincrone.

Gerarchia di ereditarietà

ITarget

target_block

Requisiti

Intestazione: agents.h

Spazio dei nomi: Concurrency

async_send

Invia in modo asincrono un messaggio per l'elaborazione.

void async_send(_Inout_opt_ message<_Source_type>* _PMessage);

Parametri

_PMessage
Un puntatore al messaggio in fase di invio.

rifiuta_messaggi_in_arrivo

Indica al blocco che i nuovi messaggi devono essere rifiutati.

void decline_incoming_messages();

Osservazioni:

Questo metodo viene chiamato dal distruttore per assicurarsi che i nuovi messaggi vengano rifiutati mentre la distruzione è in corso.

abilita_elaborazione_batch

Abilita l'elaborazione batch per questo blocco.

void enable_batched_processing();

inizializza_obiettivo

Inizializza l'oggetto di base. In particolare, l'oggetto message_processor deve essere inizializzato.

void initialize_target(
    _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 origine specificato a questo target_block oggetto.

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

Parametri

_PSource
Puntatore al ISource blocco da collegare.

Osservazioni:

Questa funzione non deve essere chiamata direttamente su un target_block oggetto . I blocchi devono essere connessi insieme usando il link_target metodo sui ISource blocchi, che richiameranno il link_source metodo sulla destinazione corrispondente.

process_input_messages

Elabora i messaggi ricevuti come input.

virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);

Parametri

_PMessage
Puntatore al messaggio da elaborare.

process_message

Quando sottoposto a override in una classe derivata, elabora un messaggio che è stato accettato dall'oggetto target_block.

virtual void process_message(message<_Source_type> *);

propagarsi

Passa in modo asincrono un messaggio da un blocco di origine a questo blocco di destinazione.

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

Parametri

_PMessage
Puntatore all'oggetto message.

_PSource
Puntatore al blocco sorgente che offre il messaggio.

Valore restituito

Un'indicazione dello stato del messaggio su ciò che il destinatario ha deciso di fare con il messaggio.

Osservazioni:

Il metodo genera un'eccezione invalid_argument se il _PMessage parametro o _PSource è NULL.

propaga_messaggio

Quando sottoposto a override in una classe derivata, questo metodo passa in modo asincrono un messaggio da un ISource blocco a questo target_block oggetto. Viene richiamato dal propagate metodo , quando viene chiamato da un blocco di origine.

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

Parametri

_PMessage
Puntatore all'oggetto message.

_PSource
Puntatore al blocco sorgente che offre il messaggio.

Valore restituito

Un'indicazione dello stato del messaggio su ciò che il destinatario ha deciso di fare con il messaggio.

register_filter

Registra un metodo di filtro che verrà richiamato in ogni messaggio ricevuto.

void register_filter(filter_method const& _Filter);

Parametri

_Filtro
Metodo di filtro.

rimuovere_fonti

Scollega tutte le fonti dopo aver atteso il completamento delle operazioni di invio asincrone in sospeso.

void remove_sources();

Osservazioni:

Tutti i blocchi di destinazione devono chiamare questa routine per rimuovere le sorgenti nel loro distruttore.

inviare

Passa in modo sincrono un messaggio da un blocco di origine a questo blocco di destinazione.

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

Parametri

_PMessage
Puntatore all'oggetto message.

_PSource
Puntatore al blocco sorgente che offre il messaggio.

Valore restituito

Un'indicazione dello stato del messaggio su ciò che il destinatario ha deciso di fare con il messaggio.

Osservazioni:

Il metodo genera un'eccezione invalid_argument se il _PMessage parametro o _PSource è NULL.

L'utilizzo del metodo send al di fuori dell'iniziazione del messaggio e per propagare i messaggi all'interno di una rete è pericoloso e può portare a un deadlock.

Quando send termina, il messaggio è già stato accettato e trasferito nel blocco di destinazione oppure è stato rifiutato dalla destinazione.

invio_messaggio

Quando sottoposto a override in una classe derivata, questo metodo passa in modo sincrono un messaggio da un ISource blocco a questo target_block oggetto. Viene richiamato dal send metodo , quando viene chiamato da un blocco di origine.

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

Valore restituito

Un'indicazione dello stato del messaggio su ciò che il destinatario ha deciso di fare con il messaggio.

Osservazioni:

Per impostazione predefinita, questo blocco restituisce declined a meno che non venga sottoposto a override da una classe derivata.

sincronizzare_invio

Inviare in modo sincrono un messaggio per l'elaborazione.

void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);

Parametri

_PMessage
Un puntatore al messaggio in fase di invio.

target_block

Costruisce un oggetto target_block.

target_block();

~target_block

Elimina definitivamente l'oggetto target_block .

virtual ~target_block();

Disconnette un blocco di origine specificato da questo oggetto target_block.

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

Parametri

_PSource
Puntatore al ISource blocco da scollegare.

Scollega tutti i blocchi di origine da questo target_block oggetto.

virtual void unlink_sources();

wait_for_async_sends

Attende il completamento di tutte le propagazioni asincrone.

void wait_for_async_sends();

Osservazioni:

Questo metodo viene usato dai distruttori di blocchi di messaggi per garantire che tutte le operazioni asincrone abbiano avuto tempo per terminare prima di distruggere il blocco.

Vedi anche

Spazio dei nomi concorrenza
Classe ITarget