Condividi tramite


Classe single_assignment

Un blocco della messaggistica single_assignment è un propagator_block multi-destinazione, multi-origine, in grado di archiviare un unico message scrivibile una sola volta.

Sintassi

template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Parametri

T
Tipo di payload del messaggio archiviato e propagato dal buffer.

Membri

Costruttori pubblici

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

Metodi pubblici

Nome Descrizione
has_value Controlla se questo single_assignment blocco di messaggistica è stato già inizializzato con un valore o meno.
value Ottiene un riferimento al payload corrente del messaggio archiviato nel single_assignment blocco di messaggistica.

Metodi protetti

Nome Descrizione
accetta_messaggio Accetta un messaggio offerto da questo single_assignment blocco di messaggistica, restituendo una copia del messaggio al chiamante.
consume_message Utilizza un messaggio precedentemente offerto da single_assignment e riservato dalla destinazione, restituendone una copia al chiamante.
link_target_notification Callback che notifica che un nuovo target è stato collegato a questo blocco di messaggistica single_assignment.
propagate_message Passa in modo asincrono un messaggio da un ISource blocco a questo single_assignment blocco di messaggistica. Viene richiamato dal propagate metodo , quando viene chiamato da un blocco di origine.
propaga_a_qualsiasi_destinazione Posiziona message _PMessage in questo single_assignment blocco di messaggi e lo offre a tutte le destinazioni collegate.
release_message Rilascia una precedente prenotazione di messaggi. (Sovrascrive source_block::release_message.)
messaggio_di_riserva Riserva un messaggio offerto in precedenza da questo single_assignment 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 single_assignment blocco di messaggistica. Viene richiamato dal send metodo , quando viene chiamato da un blocco di origine.

Osservazioni:

Un single_assignment blocco di messaggistica propaga copie del messaggio a ogni destinazione.

Per altre informazioni, vedere Blocchi di messaggi asincroni.

Gerarchia di ereditarietà

ISource

ITarget

source_block

propagator_block

single_assignment

Requisiti

Intestazione: agents.h

Spazio dei nomi: Concurrency

accetta_messaggio

Accetta un messaggio offerto da questo single_assignment blocco di messaggistica, restituendo una copia del messaggio al chiamante.

virtual message<T>* 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à.

Osservazioni:

Il single_assignment blocco di messaggistica restituisce copie del messaggio ai suoi destinatari, anziché trasferire la proprietà del messaggio attualmente trattenuto.

consume_message

Utilizza un messaggio precedentemente offerto da single_assignment e riservato dalla destinazione, restituendone una copia al chiamante.

virtual message<T>* 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.

ha_valore

Controlla se questo single_assignment blocco di messaggistica è stato già inizializzato con un valore o meno.

bool has_value() const;

Valore restituito

true se il blocco ha ricevuto un valore, false in caso contrario.

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

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

Parametri

_PTarget
Puntatore alla destinazione appena collegata.

propaga_messaggio

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

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

propagate_to_any_targets

Inserisce questo blocco di messaggistica message_PMessage in single_assignment e lo offre a tutte le destinazioni collegate.

virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);

Parametri

_PMessage
Puntatore a un message oggetto di cui questo single_assignment blocco di messaggistica ha acquisito la proprietà.

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 single_assignment 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 single_assignment blocco di messaggistica. Viene richiamato dal send metodo , quando viene chiamato da un blocco di origine.

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

assegnazione singola

Costruisce un blocco di messaggistica single_assignment.

single_assignment();

single_assignment(
    filter_method const& _Filter);

single_assignment(
    Scheduler& _PScheduler);

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

single_assignment(
    ScheduleGroup& _PScheduleGroup);

single_assignment(
    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 single_assignment .

_PScheduleGroup
Oggetto ScheduleGroup all'interno del quale è pianificata l'attività di propagazione per il blocco della messaggistica single_assignment . 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 (T const &) che viene richiamato da questo single_assignment blocco di messaggistica per determinare se deve accettare o meno un messaggio offerto.

~single_assignment

Elimina definitivamente il single_assignment blocco di messaggistica.

~single_assignment();

valore

Ottiene un riferimento al payload corrente del messaggio archiviato nel single_assignment blocco di messaggistica.

T const& value();

Valore restituito

Contenuto del messaggio archiviato.

Osservazioni:

Questo metodo attenderà l'arrivo di un messaggio se non è attualmente archiviato alcun messaggio nel single_assignment blocco di messaggistica.

Vedi anche

Spazio dei nomi concorrenza
Classe overwrite_buffer
classe unbounded_buffer