Condividi tramite


Classe Scelta

Un blocco di messaggistica choice è un blocco multi-origine a destinazione singola che rappresenta un'interazione del flusso di controllo con un set di origini. Il blocco choice attenderà che una qualsiasi delle molteplici origini produca un messaggio e propagherà l'indice dell'origine che ha prodotto il messaggio.

Sintassi

template<
    class T
>
class choice: public ISource<size_t>;

Parametri

T
Tipo basato su tuple che rappresenta i payload delle origini di input.

Membri

Typedef pubblici

Nome Descrizione
type Alias di tipo per T.

Costruttori pubblici

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

Metodi pubblici

Nome Descrizione
accettare Accetta un messaggio offerto da questo blocco choice, passando la proprietà al chiamante.
acquire_ref Acquisisce un conteggio dei riferimenti su questo choice blocco di messaggistica per impedire l'eliminazione.
consumare Utilizza un messaggio offerto in precedenza da questo choice blocco di messaggistica e riservato correttamente dalla destinazione, trasferendo la proprietà al chiamante.
has_value Controlla se questo choice blocco di messaggistica è stato già inizializzato con un valore o meno.
indice Restituisce un indice nell'oggetto tuple che rappresenta l'elemento selezionato dal choice blocco di messaggistica.
link_target Collega un blocco di destinazione a questo blocco di choice messaggi.
release Rilascia una prenotazione di messaggi con esito positivo precedente.
release_ref Rilascia un conteggio dei riferimenti su questo choice blocco di messaggistica.
reserve Riserva un messaggio offerto in precedenza da questo choice blocco di messaggistica.
unlink_target Scollega un blocco di destinazione da questo choice blocco di messaggistica.
unlink_targets Scollega tutte le destinazioni da questo blocco di messaggistica choice. (Sovrascrive ISource::unlink_targets.)
value Ottiene il messaggio di cui il choice indice è stato selezionato dal blocco di messaggistica.

Osservazioni:

Il blocco di scelta garantisce che venga utilizzato solo uno dei messaggi in arrivo.

Per altre informazioni, vedere Blocchi di messaggi asincroni.

Gerarchia di ereditarietà

ISource

choice

Requisiti

Intestazione: agents.h

Spazio dei nomi: Concurrency

accettare

Accetta un messaggio offerto da questo blocco choice, passando la proprietà al chiamante.

virtual message<size_t>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametri

_MsgId
L'oggetto runtime_object_identity dell'offerta message.

_PTarget
Puntatore al blocco di destinazione che chiama il metodo accept.

Valore restituito

Puntatore al messaggio di cui il chiamante ha ora la proprietà.

acquire_ref

Acquisisce un conteggio dei riferimenti su questo choice blocco di messaggistica per impedire l'eliminazione.

virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);

Parametri

_PTarget
Puntatore al blocco di destinazione che chiama questo metodo.

Osservazioni:

Questo metodo viene chiamato da un ITarget oggetto collegato a questa origine durante il link_target metodo .

scelta

Costruisce un blocco di messaggistica choice.

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

Parametri

_Tupla
Una tuple di fonti per la scelta.

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

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

_Scelta
Blocco della messaggistica choice da cui copiare. Si noti che l'oggetto originale è orfano, si tratta quindi di un costruttore di spostamento.

Osservazioni:

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

Il costruttore di spostamento non viene eseguito sotto un blocco, il che significa che è responsabilità dell'utente assicurarsi che non ci siano attività di basso impatto in corso al momento dello spostamento. In caso contrario, possono verificarsi situazioni di race condition che possono portare a eccezioni oppure a uno stato incoerente.

~scelta

Elimina definitivamente il choice blocco di messaggistica.

~choice();

consumare

Utilizza un messaggio offerto in precedenza da questo choice blocco di messaggistica e riservato correttamente dalla destinazione, trasferendo la proprietà al chiamante.

virtual message<size_t>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametri

_MsgId
La runtime_object_identity dell'oggetto riservato message.

_PTarget
Puntatore al blocco di destinazione che chiama il metodo consume.

Valore restituito

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

Osservazioni:

Il consume metodo è simile a accept, ma deve essere sempre preceduto da una chiamata a reserve che ha restituito true.

ha_valore

Controlla se questo choice 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.

indice

Restituisce un indice nell'oggetto tuple che rappresenta l'elemento selezionato dal choice blocco di messaggistica.

size_t index();

Valore restituito

Indice del messaggio.

Osservazioni:

Il payload del messaggio può essere estratto usando il get metodo .

Collega un blocco di destinazione a questo blocco di choice messaggi.

virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);

Parametri

_PTarget
Puntatore a un blocco ITarget collegato a questo blocco di messaggistica choice.

rilascio

Rilascia una prenotazione di messaggi con esito positivo precedente.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametri

_MsgId
runtime_object_identity dell'oggetto message che viene rilasciato.

_PTarget
Puntatore al blocco di destinazione che chiama il metodo release.

release_ref

Rilascia un conteggio dei riferimenti su questo choice blocco di messaggistica.

virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);

Parametri

_PTarget
Puntatore al blocco di destinazione che chiama questo metodo.

Osservazioni:

Questo metodo viene chiamato da un ITarget oggetto che viene scollegato da questa origine. Il blocco di origine può rilasciare tutte le risorse riservate per il blocco di destinazione.

riserva

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

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parametri

_MsgId
Elemento runtime_object_identity dell'oggetto message riservato.

_PTarget
Puntatore al blocco di destinazione che chiama il metodo reserve.

Valore restituito

true se il messaggio è stato riservato correttamente, false in caso contrario. Le prenotazioni possono avere esito negativo per vari motivi, ad esempio: il messaggio era già riservato o accettato da un'altra destinazione, le prenotazioni potrebbero essere negate dall'origine e così via.

Osservazioni:

Dopo aver chiamato reserve, se ha esito positivo, è necessario chiamare consume o release per accettare o rinunciare rispettivamente al possesso del messaggio.

Scollega un blocco di destinazione da questo choice blocco di messaggistica.

virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);

Parametri

_PTarget
Puntatore a un blocco ITarget da scollegare da questo blocco di messaggistica choice.

Scollega tutte le destinazioni da questo blocco di messaggistica choice.

virtual void unlink_targets();

Osservazioni:

Questo metodo non deve essere chiamato dal distruttore perché il distruttore per il blocco interno single_assignment verrà scollegato correttamente.

valore

Ottiene il messaggio di cui il choice indice è stato selezionato dal blocco di messaggistica.

template <
    typename _Payload_type
>
_Payload_type const& value();

Parametri

_Payload_type
Il tipo di payload del messaggio.

Valore restituito

Il payload del messaggio.

Osservazioni:

Poiché un blocco di messaggistica choice può accettare input con tipi diversi di payload, è necessario specificare il tipo del payload al momento del recupero. È possibile determinare il tipo in base al risultato del index metodo .

Vedi anche

Spazio dei nomi concorrenza
Unisciti alla classe
Classe single_assignment