Freigeben über


Klasse beitreten

Ein join-Meldungsblock ist ein geordneter propagator_block mit mehreren Quellen und einem einzelnen Ziel, der Meldungen vom Typ T aus allen Quellen kombiniert.

Syntax

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

Parameter

T
Der Nutzlasttyp der nachrichten, die vom Block verknüpft und weitergegeben werden.

_Jtype
Die Art des join Blocks ist dies entweder greedy oder non_greedy

Mitglieder

Öffentliche Konstruktoren

Name Beschreibung
Verknüpfen Überladen. Erstellt einen join -Meldungsblock.
~join Destructor Zerstört den join Block.

Geschützte Methoden

Name Beschreibung
nachricht_akzeptieren Akzeptiert eine Nachricht, die von diesem join Nachrichtenblock angeboten wurde, und überträgt den Besitz an den Anrufer.
consume_message Eine zuvor vom join Messaging-Block angebotene und vom Ziel reservierte Nachricht wird genutzt, um das Eigentum an den Anrufer zu übertragen.
link_target_notification Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem join Messagingblock verknüpft wurde.
propagate_message Eine Nachricht wird asynchron von einem ISource Block an diesen join Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
auf_beliebige_Ziele_übertragen Erstellt eine Ausgabenachricht, die eine Eingabenachricht aus jeder Quelle enthält, wenn sie alle eine Nachricht weitergegeben haben. Sendet diese Ausgabemeldung an jedes seiner Ziele.
release_message Veröffentlicht eine vorherige Nachrichtenreservierung. (Überschreibt source_block::release_message.)
reserve_message Reserviert eine Nachricht, die zuvor von diesem join Nachrichtenblock angeboten wurde. (Überschreibt source_block::reserve_message.)
resume_propagation Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde. (Überschreibt source_block::resume_propagation.)

Hinweise

Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".

Vererbungshierarchie

ISource

ITarget

source_block

Propagator-Block

join

Anforderungen

Header: agents.h

Namespace: Parallelität

Nachricht_annehmen

Akzeptiert eine Nachricht, die von diesem join Nachrichtenblock angeboten wurde, und überträgt den Besitz an den Anrufer.

virtual message<_OutputType>* accept_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Das runtime_object_identity angebotene message Objekt.

Rückgabewert

Ein Zeiger auf das message Objekt, dessen Besitzer der Aufrufer jetzt ist.

Nachricht_verarbeiten

Eine zuvor vom join Messaging-Block angebotene und vom Ziel reservierte Nachricht wird genutzt, um das Eigentum an den Anrufer zu übertragen.

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

Parameter

_MsgId
Das runtime_object_identity Objekt, das message verbraucht wird.

Rückgabewert

Ein Zeiger auf das message Objekt, dessen Besitzer der Aufrufer jetzt ist.

Hinweise

Ähnlich wie accept, wird jedoch immer von einem Aufruf von reserve gefolgt.

Beitreten

Erstellt einen join -Meldungsblock.

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

Parameter

_NumInputs
Die Anzahl der Eingaben, die dieser join Block zulässt.

_Filter
Eine Filterfunktion, die bestimmt, ob angebotene Nachrichten akzeptiert werden sollen.

_PScheduler
Das Scheduler -Objekt, in dem die Weiterleitungsaufgabe für den join -Meldungsblock geplant ist.

_PScheduleGroup
Das ScheduleGroup -Objekt, in dem die Weiterleitungsaufgabe für den join -Meldungsblock geplant ist. Das verwendete Scheduler -Objekt wird von der Planungsgruppe impliziert.

Hinweise

Die Runtime verwendet das Standardplanungsprogramm, wenn Sie den _PScheduler -Parameter oder den _PScheduleGroup -Parameter nicht angeben.

Der Typ filter_method ist ein Functor mit Signatur bool (T const &) , der von diesem join Messagingblock aufgerufen wird, um zu bestimmen, ob eine angebotene Nachricht akzeptiert werden soll.

~verbinden

Zerstört den join Block.

~join();

Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem join Messagingblock verknüpft wurde.

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

Nachricht_verbreiten

Eine Nachricht wird asynchron von einem ISource Block an diesen join Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.

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

Parameter

_PMessage
Ein Zeiger auf das message-Objekt.

_PSource
Ein Zeiger auf den Quellblock, der die Nachricht übermittelt.

Rückgabewert

Eine message_status-Angabe darüber, was das Ziel mit der Nachricht vorhat.

an beliebige Ziele weiterleiten

Erstellt eine Ausgabenachricht, die eine Eingabenachricht aus jeder Quelle enthält, wenn sie alle eine Nachricht weitergegeben haben. Sendet diese Ausgabemeldung an jedes seiner Ziele.

void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);

Freigabebenachrichtigung

Veröffentlicht eine vorherige Nachrichtenreservierung.

virtual void release_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Das runtime_object_identity des message Objekts, das freigegeben wird.

Reservierungsnachricht

Reserviert eine Nachricht, die zuvor von diesem join Nachrichtenblock angeboten wurde.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Das runtime_object_identity angebotene message Objekt.

Rückgabewert

true wenn die Nachricht erfolgreich reserviert wurde, false andernfalls.

Hinweise

Nachdem reserve aufgerufen wurde, wenn true zurückgegeben wird, müssen entweder consume oder release aufgerufen werden, um den Besitz der Nachricht entweder zu übernehmen oder freizugeben.

resume_propagation

Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde.

virtual void resume_propagation();

Siehe auch

Concurrency-Namespace
choice-Klasse
multitype_join-Klasse