Condividi tramite


Classe buffer non limitato

Un blocco di messaggistica unbounded_buffer è un propagator_block multi-destinazione e multi-origine, in grado di archiviare un numero illimitato di messaggi.

Sintassi

template<
   class             _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget<            _Type>>, multi_link_registry<ISource<            _Type>>>;

Parametri

_Tipo
Tipo di payload dei messaggi archiviati e propagati dal buffer.

Membri

Costruttori pubblici

Nome Descrizione
unbounded_buffer Sovraccarico. Costruisce un unbounded_buffer blocco di messaggistica.
Distruttore ~unbounded_buffer Elimina definitivamente il unbounded_buffer blocco di messaggistica.

Metodi pubblici

Nome Descrizione
Dequeue Rimuove un elemento dal unbounded_buffer blocco di messaggistica.
Enqueue Aggiunge un elemento al unbounded_buffer blocco di messaggistica.

Metodi protetti

Nome Descrizione
accetta_messaggio Accetta un messaggio offerto da questo unbounded_buffer blocco di messaggistica, trasferendo la proprietà al chiamante.
consume_message Utilizza un messaggio offerto in precedenza dal unbounded_buffer blocco di messaggistica e riservato dalla destinazione, trasferendo la proprietà al chiamante.
link_target_notification Callback che notifica che un nuovo target è stato collegato a questo blocco di messaggistica unbounded_buffer.
process_input_messages Inserisce questo blocco di messaggistica nel message_PMessage e tenta di offrirlo a tutte le destinazioni collegate.
propagate_message Passa in modo asincrono un messaggio da un ISource blocco a questo unbounded_buffer blocco di messaggistica. Viene richiamato dal propagate metodo , quando viene chiamato da un blocco di origine.
propagate_output_messages Inserisce il message_PMessage in questo blocco di messaggistica unbounded_buffer e tenta di offrirlo a tutte le destinazioni collegate. Esegue l'override di source_block::propagate_output_messages.
release_message Rilascia una precedente prenotazione di messaggi. (Sovrascrive source_block::release_message.)
messaggio_di_riserva Riserva un messaggio offerto in precedenza da questo unbounded_buffer blocco di messaggistica. Esegue l'operazione di override di source_block::reserve_message.
resume_propagation Riprende la propagazione dopo il rilascio di una prenotazione. (Oltrepassa source_block::resume_propagation.)
send_message Passa in modo sincrono un messaggio da un ISource blocco a questo unbounded_buffer blocco di messaggistica. Viene richiamato dal send metodo , quando viene chiamato da un blocco di origine.
supports_anonymous_source Esegue l'override del metodo supports_anonymous_source per indicare che questo blocco può accettare messaggi offerti da un'origine non collegata. (Sovrascrive ITarget::supports_anonymous_source.)

Per altre informazioni, vedere Blocchi di messaggi asincroni.

Gerarchia di ereditarietà

ISource

ITarget

source_block

propagator_block

unbounded_buffer

Requisiti

Intestazione: agents.h

Spazio dei nomi: Concurrency

accetta_messaggio

Accetta un messaggio offerto da questo unbounded_buffer blocco di messaggistica, trasferendo la proprietà al chiamante.

virtual message<_Type> * accept_message(
   runtime_object_identity                 _MsgId
);

Parametri

_MsgId
L'oggetto runtime_object_identity dell'offerta message.

Valore restituito

Puntatore all'oggetto message di cui il chiamante ha ora la proprietà.

consume_message

Utilizza un messaggio offerto in precedenza dal unbounded_buffer blocco di messaggistica e riservato dalla destinazione, trasferendo la proprietà al chiamante.

virtual message<_Type> * consume_message(
   runtime_object_identity                 _MsgId
);

Parametri

_MsgId
Il runtime_object_identity dell'oggetto message che viene consumato.

Valore restituito

Puntatore all'oggetto message di cui il chiamante ha ora la proprietà.

Osservazioni:

Simile a accept, ma è sempre preceduto da una chiamata a reserve.

rimuovere dalla coda

Rimuove un elemento dal unbounded_buffer blocco di messaggistica.

_Type dequeue();

Valore restituito

Payload del messaggio rimosso da unbounded_buffer.

accodare

Aggiunge un elemento al unbounded_buffer blocco di messaggistica.

bool enqueue(
   _Type const&                 _Item
);

Parametri

_Articolo
Elemento da aggiungere.

Valore restituito

true se l'elemento è stato accettato, false in caso contrario.

Callback che notifica che un nuovo target è stato collegato a questo blocco di messaggistica unbounded_buffer.

virtual void link_target_notification(
   _Inout_ ITarget<_Type> *                 _PTarget
);

Parametri

_PTarget
Puntatore alla destinazione appena collegata.

propaga_messaggio

Passa in modo asincrono un messaggio da un ISource blocco a questo unbounded_buffer blocco di messaggistica. Viene richiamato dal propagate metodo , quando viene chiamato da un blocco di origine.

virtual message_status propagate_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_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.

propagare_messaggi_uscita

Inserisce il message_PMessage in questo blocco di messaggistica unbounded_buffer e tenta di offrirlo a tutte le destinazioni collegate.

virtual void propagate_output_messages();

Osservazioni:

Se un altro messaggio è già in anticipo in unbounded_buffer, la propagazione alle destinazioni collegate non si verificherà fino a quando non vengono accettati o utilizzati messaggi precedenti. La prima destinazione collegata che riesce a accept o consume correttamente il messaggio ne diventa proprietaria, e nessun'altra destinazione può riceverlo.

process_input_messages

Inserisce il message_PMessage in questo blocco di messaggistica unbounded_buffer e tenta di offrirlo a tutte le destinazioni collegate.

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

Parametri

_PMessage
Puntatore al messaggio da elaborare.

messaggio_di_rilascio

Rilascia una precedente prenotazione di messaggi.

virtual void release_message(
   runtime_object_identity                 _MsgId
);

Parametri

_MsgId
runtime_object_identity dell'oggetto message che viene rilasciato.

messaggio_di_riserva

Riserva un messaggio offerto in precedenza da questo unbounded_buffer blocco di messaggistica.

virtual bool reserve_message(
   runtime_object_identity                 _MsgId
);

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

Riprende la propagazione dopo il rilascio di una prenotazione.

virtual void resume_propagation();

invio_messaggio

Passa in modo sincrono un messaggio da un ISource blocco a questo unbounded_buffer blocco di messaggistica. Viene richiamato dal send metodo , quando viene chiamato da un blocco di origine.

virtual message_status send_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_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.

supporta_sorgente_anonima

Esegue l'override del metodo supports_anonymous_source per indicare che questo blocco può accettare messaggi offerti da un'origine non collegata.

virtual bool supports_anonymous_source();

Valore restituito

true poiché il blocco non posticipa i messaggi offerti.

buffer illimitato

Costruisce un unbounded_buffer blocco di messaggistica.

unbounded_buffer();

unbounded_buffer(
   filter_method const&                 _Filter
);

unbounded_buffer(
   Scheduler&                 _PScheduler
);

unbounded_buffer(
   Scheduler&                 _PScheduler,
   filter_method const&                 _Filter
);

unbounded_buffer(
   ScheduleGroup&                 _PScheduleGroup
);

unbounded_buffer(
   ScheduleGroup&                 _PScheduleGroup,
   filter_method const&                 _Filter
);

Parametri

_Filtro
Funzione di filtro che determina se i messaggi offerti devono essere accettati.

_PScheduler
Oggetto Scheduler all'interno del quale è pianificata l'attività di propagazione per il blocco della messaggistica unbounded_buffer .

_PScheduleGroup
Oggetto ScheduleGroup all'interno del quale è pianificata l'attività di propagazione per il blocco della messaggistica unbounded_buffer . L'oggetto Scheduler utilizzato è implicito nel gruppo di pianificazione.

Osservazioni:

Se non si specificano i parametri _PScheduler o _PScheduleGroup , il runtime usa l'utilità di pianificazione predefinita.

Il tipo filter_method è un funtore con firma bool (_Type const &) che viene richiamato da questo unbounded_buffer blocco di messaggistica per determinare se deve accettare o meno un messaggio offerto.

~buffer_illimitato

Elimina definitivamente il unbounded_buffer blocco di messaggistica.

~unbounded_buffer();

Vedi anche

Spazio dei nomi concorrenza
Classe overwrite_buffer
Classe single_assignment