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