Condividi tramite


Unisciti alla Classe

Un join blocco della messaggistica è un propagator_block a destinazione singola, multi-origine, che combina insieme messaggi di tipo T da ciascuna delle sue origini.

Sintassi

template<class T,
    join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
    multi_link_registry<ISource<T>>>;

Parametri

T
Tipo di payload dei messaggi aggiunti e propagati dal blocco.

_Jtype
Il tipo di blocco join è, o greedy o non_greedy

Membri

Costruttori pubblici

Nome Descrizione
join Sovraccarico. Costruisce un blocco di messaggistica join.
Distruttore di ~join Distrugge il join blocco.

Metodi protetti

Nome Descrizione
accetta_messaggio Accetta un messaggio offerto da questo join blocco di messaggistica, trasferendo la proprietà al chiamante.
consume_message Utilizza un messaggio offerto in precedenza dal join 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 join.
propagate_message Passa in modo asincrono un messaggio da un ISource blocco a questo join blocco di messaggistica. Viene richiamato dal propagate metodo , quando viene chiamato da un blocco di origine.
propaga_a_qualsiasi_destinazione Costruisce un messaggio di output contenente un messaggio di input da ciascuna fonte quando tutte hanno propagato un messaggio. Invia questo messaggio di output a ognuna delle destinazioni.
release_message Rilascia una precedente prenotazione di messaggi. (Sovrascrive source_block::release_message.)
messaggio_di_riserva Riserva un messaggio offerto in precedenza da questo join 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.)

Osservazioni:

Per altre informazioni, vedere Blocchi di messaggi asincroni.

Gerarchia di ereditarietà

ISource

ITarget

source_block

propagator_block

join

Requisiti

Intestazione: agents.h

Spazio dei nomi: Concurrency

accetta_messaggio

Accetta un messaggio offerto da questo join blocco di messaggistica, trasferendo la proprietà al chiamante.

virtual message<_OutputType>* 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 join blocco di messaggistica e riservato dalla destinazione, trasferendo la proprietà al chiamante.

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

unire

Costruisce un blocco di messaggistica join.

join(
    size_t _NumInputs);

join(
    size_t _NumInputs,
    filter_method const& _Filter);

join(
    Scheduler& _PScheduler,
    size_t _NumInputs);

join(
    Scheduler& _PScheduler,
    size_t _NumInputs,
    filter_method const& _Filter);

join(
    ScheduleGroup& _PScheduleGroup,
    size_t _NumInputs);

join(
    ScheduleGroup& _PScheduleGroup,
    size_t _NumInputs,
    filter_method const& _Filter);

Parametri

_NumInputs
Numero di input consentiti da questo join blocco.

_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 join .

_PScheduleGroup
Oggetto ScheduleGroup all'interno del quale è pianificata l'attività di propagazione per il blocco della messaggistica join . 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 join blocco di messaggistica per determinare se deve accettare o meno un messaggio offerto.

~unire

Distrugge il join blocco.

~join();

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

virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);

propaga_messaggio

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

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

Costruisce un messaggio di output contenente un messaggio di input da ciascuna fonte quando tutte hanno propagato un messaggio. Invia questo messaggio di output a ognuna delle destinazioni.

void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);

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 join blocco di messaggistica.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parametri

_MsgId
L'oggetto runtime_object_identity dell'offerta message.

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();

Vedi anche

Spazio dei nomi concorrenza
Classe choice
Classe multitype_join