Share via


Classe single_assignment

Un blocco della messaggistica single_assignment è un propagator_block multi-origine, a destinazione singola, in grado di archiviare un unico message scrivibile una 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
Single_assignment Con overload. Costruisce un blocco della messaggistica single_assignment .
Distruttore ~single_assignment Elimina definitivamente il single_assignment blocco di messaggistica.

Metodi pubblici

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

Metodi protetti

Nome Descrizione
accept_message Accetta un messaggio offerto da questo single_assignment blocco di messaggistica, restituendo una copia del messaggio al chiamante.
consume_message Utilizza un messaggio offerto in precedenza da e riservato dalla single_assignment destinazione, restituendo una copia del messaggio al chiamante.
link_target_notification Callback che notifica che una nuova destinazione è stata collegata a questo single_assignment blocco di messaggistica.
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.
propagate_to_any_targets Inserisce in message _PMessage questo single_assignment blocco di messaggistica e lo offre a tutte le destinazioni collegate.
release_message Rilascia una prenotazione di messaggi precedente. (Esegue l'override di source_block::release_message.
reserve_message Riserva un messaggio offerto in precedenza da questo single_assignment blocco di messaggistica. Esegue l'override di source_block::reserve_message.
resume_propagation Riprende la propagazione dopo il rilascio di una prenotazione. (Esegue l'override di 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

accept_message

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
Oggetto runtime_object_identity dell'oggetto offerto 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 nelle destinazioni, anziché trasferire la proprietà del messaggio attualmente mantenuto.

consume_message

Utilizza un messaggio offerto in precedenza da e riservato dalla single_assignment destinazione, restituendo una copia del messaggio al chiamante.

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

Parametri

_Msgid
Oggetto runtime_object_identity dell'oggetto message utilizzato.

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.

has_value

Controlla se questo single_assignment blocco di messaggistica è stato inizializzato con un valore ancora.

bool has_value() const;

Valore restituito

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

Callback che notifica che una nuova destinazione è stata collegata a questo single_assignment blocco di messaggistica.

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

Parametri

_PTarget
Puntatore alla destinazione appena collegata.

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.

virtual message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

Parametri

_PMessage
Puntatore all'oggetto message.

_PSource
Puntatore al blocco di origine che offre il messaggio.

Valore restituito

Un message_status'indicazione di ciò che la destinazione ha deciso di fare con il messaggio.

propagate_to_any_targets

Inserisce in message_PMessage questo single_assignment blocco di messaggistica 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à.

release_message

Rilascia una prenotazione di messaggi precedente.

virtual void release_message(runtime_object_identity _MsgId);

Parametri

_Msgid
Oggetto runtime_object_identity dell'oggetto message da rilasciare.

reserve_message

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

virtual bool reserve_message(runtime_object_identity _MsgId);

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

Riprende la propagazione dopo il rilascio di una prenotazione.

virtual void 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.

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

Parametri

_PMessage
Puntatore all'oggetto message.

_PSource
Puntatore al blocco di origine che offre il messaggio.

Valore restituito

Un message_status'indicazione di ciò che la destinazione ha deciso di fare con il messaggio.

Single_assignment

Costruisce un blocco della 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 usato è previsto dal 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();

value

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

T const& value();

Valore restituito

Payload 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 concurrency
Classe overwrite_buffer
Classe unbounded_buffer