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