Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein single_assignment-Meldungsblock ist ein geordneter propagator_block mit mehreren Zielen und mehreren Quellen, der eine einzelne, einmal beschreibbare message speichern kann.
Syntax
template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Parameter
T
Der Nutzlasttyp der vom Puffer gespeicherten und weitergegebenen Nachricht.
Member
Öffentliche Konstruktoren
| Name | Beschreibung |
|---|---|
| single_assignment | Überladen. Erstellt einen single_assignment -Meldungsblock. |
| ~single_assignment Destruktor | Zerstört den single_assignment Nachrichtenblock. |
Öffentliche Methoden
| Name | Beschreibung |
|---|---|
| has_value | Überprüft, ob dieser single_assignment Nachrichtenblock mit einem Wert initialisiert wurde. |
| value | Ruft einen Verweis auf die aktuelle Nutzlast der Nachricht ab, die single_assignment im Nachrichtenblock gespeichert wird. |
Geschützte Methoden
| Name | Beschreibung |
|---|---|
| accept_message | Akzeptiert eine Nachricht, die von diesem single_assignment Nachrichtenblock angeboten wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück. |
| consume_message | Nutzt eine Nachricht, die single_assignment zuvor vom Ziel angeboten und reserviert wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück. |
| link_target_notification | Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem single_assignment Messagingblock verknüpft wurde. |
| propagate_message | Eine Nachricht wird asynchron von einem ISource Block an diesen single_assignment Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird. |
| propagate_to_any_targets | Platziert den message _PMessage In diesem single_assignment Messaging-Block und bietet ihn allen verknüpften Zielen an. |
| release_message | Veröffentlicht eine vorherige Nachrichtenreservierung. (Überschreibt source_block::release_message.) |
| reserve_message | Reserviert eine Nachricht, die zuvor von diesem single_assignment Nachrichtenblock angeboten wurde. (Überschreibt source_block::reserve_message.) |
| resume_propagation | Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde. (Überschreibt source_block::resume_propagation.) |
| send_message | Übergibt eine Nachricht synchron von einem ISource Block an diesen single_assignment Nachrichtenblock. Sie wird von der send Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird. |
Hinweise
Ein single_assignment Nachrichtenblock verteilt Kopien seiner Nachricht an jedes Ziel.
Weitere Informationen finden Sie unter "Asynchrone Nachrichtenblöcke".
Vererbungshierarchie
single_assignment
Anforderungen
Header: agents.h
Namespace: Parallelität
accept_message
Akzeptiert eine Nachricht, die von diesem single_assignment Nachrichtenblock angeboten wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück.
virtual message<T>* 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.
Hinweise
Der single_assignment Nachrichtenblock gibt Kopien der Nachricht an seine Ziele zurück, anstatt den Besitz der aktuell gehaltenen Nachricht zu übertragen.
consume_message
Nutzt eine Nachricht, die single_assignment zuvor vom Ziel angeboten und reserviert wurde, und gibt eine Kopie der Nachricht an den Anrufer zurück.
virtual message<T>* 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, aber wird immer ein Aufruf von reserve.
has_value
Überprüft, ob dieser single_assignment Nachrichtenblock mit einem Wert initialisiert wurde.
bool has_value() const;
Rückgabewert
true wenn der Block einen Wert erhalten hat, false andernfalls.
link_target_notification
Ein Rückruf, der benachrichtigt, dass ein neues Ziel mit diesem single_assignment Messagingblock verknüpft wurde.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Parameter
_PTarget
Ein Zeiger auf das neu verknüpfte Ziel.
propagate_message
Eine Nachricht wird asynchron von einem ISource Block an diesen single_assignment Nachrichtenblock übergeben. Sie wird von der propagate Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
virtual 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 anbietet.
Rückgabewert
Ein message_status Hinweis darauf, was das Ziel mit der Nachricht zu tun hat.
propagate_to_any_targets
Platziert den message _PMessage In diesem single_assignment Messaging-Block und bietet ihn allen verknüpften Zielen an.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Parameter
_PMessage
Ein Zeiger auf einen message , von dem dieser single_assignment Nachrichtenblock besitze.
release_message
Veröffentlicht eine vorherige Nachrichtenreservierung.
virtual void release_message(runtime_object_identity _MsgId);
Parameter
_MsgId
Das runtime_object_identity Objekt, das message freigegeben wird.
reserve_message
Reserviert eine Nachricht, die zuvor von diesem single_assignment Nachrichtenblock angeboten wurde.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parameter
_MsgId
Das runtime_object_identity Objekt, das message reserviert wird.
Rückgabewert
true wenn die Nachricht erfolgreich reserviert wurde, false andernfalls.
Hinweise
Nach reserve dem Aufruf, wenn er zurückgegeben truewird, oder release muss aufgerufen werden, consume um entweder den Besitz der Nachricht zu übernehmen oder freizugeben.
resume_propagation
Setzt die Verteilung fort, nachdem eine Reservierung freigegeben wurde.
virtual void resume_propagation();
send_message
Übergibt eine Nachricht synchron von einem ISource Block an diesen single_assignment Nachrichtenblock. Sie wird von der send Methode aufgerufen, wenn sie von einem Quellblock aufgerufen wird.
virtual message_status send_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 anbietet.
Rückgabewert
Ein message_status Hinweis darauf, was das Ziel mit der Nachricht zu tun hat.
single_assignment
Erstellt einen single_assignment -Meldungsblock.
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);
Parameter
_Filter
Eine Filterfunktion, die bestimmt, ob angebotene Nachrichten akzeptiert werden sollen.
_PScheduler
Das Scheduler -Objekt, in dem die Weiterleitungsaufgabe für den single_assignment -Meldungsblock geplant ist.
_PScheduleGroup
Das ScheduleGroup -Objekt, in dem die Weiterleitungsaufgabe für den single_assignment -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 single_assignment Messagingblock aufgerufen wird, um zu bestimmen, ob eine angebotene Nachricht akzeptiert werden soll.
~single_assignment
Zerstört den single_assignment Nachrichtenblock.
~single_assignment();
value
Ruft einen Verweis auf die aktuelle Nutzlast der Nachricht ab, die single_assignment im Nachrichtenblock gespeichert wird.
T const& value();
Rückgabewert
Die Nutzlast der gespeicherten Nachricht.
Hinweise
Diese Methode wartet, bis eine Nachricht eingeht, wenn derzeit keine Nachricht im single_assignment Nachrichtenblock gespeichert ist.
Siehe auch
Concurrency-Namespace
overwrite_buffer-Klasse
unbounded_buffer-Klasse