ISource-Klasse

Die ISource-Klasse ist die Schnittstelle für alle Quellblöcke. Quellblöcke geben Meldungen an ITarget-Blöcke weiter.

Syntax

template<class T>
class ISource;

Parameter

T
Der Datentyp der Nutzlast innerhalb der vom Quellblock erzeugten Nachrichten.

Member

Öffentliche Typedefs

Name Beschreibung
source_type Ein Typalias für T.

Öffentliche Konstruktoren

Name Beschreibung
~ISource Destructor Zerstört das ISource-Objekt.

Öffentliche Methoden

Name Beschreibung
annehmen Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, akzeptiert sie eine Nachricht, die von diesem ISource Block angeboten wurde, und überträgt den Besitz an den Aufrufer.
acquire_ref Wenn sie in einer abgeleiteten Klasse überschrieben werden, wird eine Verweisanzahl für diesen ISource Block erworben, um das Löschen zu verhindern.
Nutzen Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine Nachricht verwendet, die zuvor von diesem ISource Block angeboten und vom Ziel erfolgreich reserviert wurde, wobei der Besitz an den Aufrufer übertragen wird.
link_target Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Zielblock mit diesem ISource Block verknüpft.
release Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine vorherige erfolgreiche Nachrichtenreservierung freigegeben.
release_ref Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird für diesen ISource Block eine Referenzanzahl freigegeben.
reserve Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, reserviert sie eine Nachricht, die zuvor von diesem ISource Block angeboten wurde.
unlink_target Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, heben Sie die Verknüpfung eines Zielblocks von diesem ISource Block auf, wenn sie zuvor verknüpft wurden.
unlink_targets Wenn sie in einer abgeleiteten Klasse überschrieben werden, heben Sie die Verknüpfung aller Zielblöcke von diesem ISource Block auf.

Hinweise

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

Vererbungshierarchie

ISource

Anforderungen

Header: agents.h

Namespace: Parallelität

Akzeptieren

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, akzeptiert sie eine Nachricht, die von diesem ISource Block angeboten wurde, und überträgt den Besitz an den Aufrufer.

virtual message<T>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_MsgId
Das runtime_object_identity angebotene message Objekt.

_PTarget
Ein Zeiger auf den Zielblock, der die accept Methode aufruft.

Rückgabewert

Ein Zeiger auf die Nachricht, deren Besitzer der Aufrufer jetzt ist.

Hinweise

Die accept Methode wird von einem Ziel aufgerufen, während eine Nachricht von diesem ISource Block angeboten wird. Der zurückgegebene Nachrichtenzeiger unterscheidet sich möglicherweise von dem, das an die propagate Methode des ITarget Blocks übergeben wird, wenn sich diese Quelle entscheidet, eine Kopie der Nachricht zu erstellen.

acquire_ref

Wenn sie in einer abgeleiteten Klasse überschrieben werden, wird eine Verweisanzahl für diesen ISource Block erworben, um das Löschen zu verhindern.

virtual void acquire_ref(_Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_PTarget
Ein Zeiger auf den Zielblock, der diese Methode aufruft.

Hinweise

Diese Methode wird von einem ITarget Objekt aufgerufen, das während der link_target Methode mit dieser Quelle verknüpft wird.

nutzen

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine Nachricht verwendet, die zuvor von diesem ISource Block angeboten und vom Ziel erfolgreich reserviert wurde, wobei der Besitz an den Aufrufer übertragen wird.

virtual message<T>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_MsgId
Das runtime_object_identity reservierte message Objekt.

_PTarget
Ein Zeiger auf den Zielblock, der die consume Methode aufruft.

Rückgabewert

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

Hinweise

Die consume Methode ähnelt accept, muss jedoch immer einem Aufruf dieser reserve zurückgegebenen Methode truevorangestellt werden.

~ISource

Zerstört das ISource-Objekt.

virtual ~ISource();

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Zielblock mit diesem ISource Block verknüpft.

virtual void link_target(_Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_PTarget
Ein Zeiger auf den Zielblock, der mit diesem ISource Block verknüpft wird.

Freigabe

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine vorherige erfolgreiche Nachrichtenreservierung freigegeben.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_MsgId
Das runtime_object_identity reservierte message Objekt.

_PTarget
Ein Zeiger auf den Zielblock, der die release Methode aufruft.

release_ref

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird für diesen ISource Block eine Referenzanzahl freigegeben.

virtual void release_ref(_Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_PTarget
Ein Zeiger auf den Zielblock, der diese Methode aufruft.

Hinweise

Diese Methode wird von einem ITarget Objekt aufgerufen, das von dieser Quelle nicht verknüpft wird. Der Quellblock darf alle Ressourcen freigeben, die für den Zielblock reserviert sind.

Reserve

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, reserviert sie eine Nachricht, die zuvor von diesem ISource Block angeboten wurde.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_MsgId
Das runtime_object_identity angebotene message Objekt.

_PTarget
Ein Zeiger auf den Zielblock, der die reserve Methode aufruft.

Rückgabewert

true wenn die Nachricht erfolgreich reserviert wurde, false andernfalls. Reservierungen können aus vielen Gründen fehlschlagen, einschließlich: Die Nachricht wurde bereits von einem anderen Ziel reserviert oder akzeptiert, die Quelle konnte Vorbehalte verweigern usw.

Hinweise

Nach dem Anruf reservemüssen Sie, falls dies erfolgreich ist, entweder consume anrufen, oder release um den Besitz der Nachricht zu übernehmen oder aufzugeben.

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, heben Sie die Verknüpfung eines Zielblocks von diesem ISource Block auf, wenn sie zuvor verknüpft wurden.

virtual void unlink_target(_Inout_ ITarget<T>* _PTarget) = 0;

Parameter

_PTarget
Ein Zeiger auf den Zielblock, der von diesem ISource Block nicht verknüpft wird.

Wenn sie in einer abgeleiteten Klasse überschrieben werden, heben Sie die Verknüpfung aller Zielblöcke von diesem ISource Block auf.

virtual void unlink_targets() = 0;

Siehe auch

Concurrency-Namespace
ITarget-Klasse