Udostępnij za pośrednictwem


Klasa single_assignment

single_assignment Blok obsługi komunikatów to wielowersyjny, wieloźródłowy, uporządkowany propagator_block w celu przechowywania pojedynczego, jednokrotnego messagezapisu.

Składnia

template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Parametry

T
Typ ładunku komunikatu przechowywanego i propagowanego przez bufor.

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
single_assignment Przeciążone. single_assignment Tworzy blok obsługi komunikatów.
~single_assignment Destruktor Niszczy blok obsługi komunikatów single_assignment .

Metody publiczne

Nazwa/nazwisko opis
has_value Sprawdza, czy ten single_assignment blok obsługi komunikatów został jeszcze zainicjowany z wartością.
wartość Pobiera odwołanie do bieżącego ładunku komunikatu przechowywanego single_assignment w bloku obsługi komunikatów.

Metody chronione

Nazwa/nazwisko opis
accept_message Akceptuje komunikat oferowany przez ten single_assignment blok obsługi komunikatów, zwracając kopię wiadomości do obiektu wywołującego.
consume_message Używa komunikatu oferowanego wcześniej przez single_assignment obiekt docelowy i zarezerwowanego przez obiekt docelowy, zwracając kopię komunikatu do obiektu wywołującego.
link_target_notification Wywołanie zwrotne, które powiadamia o tym, że nowy element docelowy został połączony z tym single_assignment blokiem obsługi komunikatów.
propagate_message Asynchronicznie przekazuje komunikat z ISource bloku do tego single_assignment bloku obsługi komunikatów. Jest wywoływana przez metodę propagate , gdy jest wywoływana przez blok źródłowy.
propagate_to_any_targets Umieszcza element message _PMessage w tym single_assignment bloku obsługi komunikatów i udostępnia go wszystkim połączonym obiektom docelowym.
release_message Zwalnia poprzednią rezerwację komunikatów. (Przesłonięcia source_block::release_message).
reserve_message Rezerwuje komunikat, który był wcześniej oferowany przez ten single_assignment blok obsługi komunikatów. (Przesłonięcia source_block::reserve_message.)
resume_propagation Wznawia propagację po wydaniu rezerwacji. (Przesłonięcia source_block::resume_propagation).)
send_message Synchronicznie przekazuje komunikat z ISource bloku do tego single_assignment bloku obsługi komunikatów. Jest wywoływana przez metodę send , gdy jest wywoływana przez blok źródłowy.

Uwagi

Blok single_assignment obsługi komunikatów propaguje kopie komunikatu do każdego obiektu docelowego.

Aby uzyskać więcej informacji, zobacz Asynchroniczne bloki komunikatów.

Hierarchia dziedziczenia

ISource

ITarget

source_block

propagator_block

single_assignment

Wymagania

Nagłówek: agents.h

Przestrzeń nazw: współbieżność

accept_message

Akceptuje komunikat oferowany przez ten single_assignment blok obsługi komunikatów, zwracając kopię wiadomości do obiektu wywołującego.

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

Parametry

_MsgId
Obiekt runtime_object_identity oferowany message .

Wartość zwracana

Wskaźnik do message obiektu, którego obiekt wywołujący ma teraz własność.

Uwagi

Blok single_assignment obsługi komunikatów zwraca kopie wiadomości do jej elementów docelowych, zamiast przenosić własność aktualnie przechowywanej wiadomości.

consume_message

Używa komunikatu oferowanego wcześniej przez single_assignment obiekt docelowy i zarezerwowanego przez obiekt docelowy, zwracając kopię komunikatu do obiektu wywołującego.

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

Parametry

_MsgId
Obiekt runtime_object_identity , który message jest używany.

Wartość zwracana

Wskaźnik do message obiektu, którego obiekt wywołujący ma teraz własność.

Uwagi

Podobnie jak acceptelement , ale zawsze jest poprzedzony wywołaniem metody reserve.

has_value

Sprawdza, czy ten single_assignment blok obsługi komunikatów został jeszcze zainicjowany z wartością.

bool has_value() const;

Wartość zwracana

true jeśli blok otrzymał wartość, false w przeciwnym razie.

Wywołanie zwrotne, które powiadamia o tym, że nowy element docelowy został połączony z tym single_assignment blokiem obsługi komunikatów.

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

Parametry

_PTarget
Wskaźnik do nowo połączonego elementu docelowego.

propagate_message

Asynchronicznie przekazuje komunikat z ISource bloku do tego single_assignment bloku obsługi komunikatów. Jest wywoływana przez metodę propagate , gdy jest wywoływana przez blok źródłowy.

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

Parametry

_PMessage
Wskaźnik do message obiektu.

_PSource
Wskaźnik do bloku źródłowego oferującego komunikat.

Wartość zwracana

Message_status wskazanie, co cel postanowił zrobić z komunikatem.

propagate_to_any_targets

Umieszcza element message _PMessage w tym single_assignment bloku obsługi komunikatów i udostępnia go wszystkim połączonym obiektom docelowym.

virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);

Parametry

_PMessage
Wskaźnik do message tego, że ten single_assignment blok obsługi komunikatów przejął własność.

release_message

Zwalnia poprzednią rezerwację komunikatów.

virtual void release_message(runtime_object_identity _MsgId);

Parametry

_MsgId
message Obiektruntime_object_identity, który jest zwalniany.

reserve_message

Rezerwuje komunikat, który był wcześniej oferowany przez ten single_assignment blok obsługi komunikatów.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parametry

_MsgId
Obiekt runtime_object_identity message , który jest zarezerwowany.

Wartość zwracana

true jeśli wiadomość została pomyślnie zarezerwowana, false w przeciwnym razie.

Uwagi

Po reserve wywołaniu metody , jeśli zwraca truewartość , consume albo release musi zostać wywołana, aby przejąć lub zwolnić własność komunikatu.

resume_propagation

Wznawia propagację po wydaniu rezerwacji.

virtual void resume_propagation();

send_message

Synchronicznie przekazuje komunikat z ISource bloku do tego single_assignment bloku obsługi komunikatów. Jest wywoływana przez metodę send , gdy jest wywoływana przez blok źródłowy.

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

Parametry

_PMessage
Wskaźnik do message obiektu.

_PSource
Wskaźnik do bloku źródłowego oferującego komunikat.

Wartość zwracana

Message_status wskazanie, co cel postanowił zrobić z komunikatem.

single_assignment

single_assignment Tworzy blok obsługi komunikatów.

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

Parametry

_Filtr
Funkcja filter, która określa, czy oferowane komunikaty powinny być akceptowane.

_PScheduler
Obiekt Scheduler , w którym zaplanowano zadanie single_assignment propagacji bloku obsługi komunikatów.

_PScheduleGroup
Obiekt ScheduleGroup , w którym zaplanowano zadanie single_assignment propagacji bloku obsługi komunikatów. Używany Scheduler obiekt jest dorozumiany przez grupę harmonogramu.

Uwagi

Jeśli nie określisz parametrów lub_PScheduleGroup, środowisko uruchomieniowe używa domyślnego _PScheduler harmonogramu.

Typ filter_method to functor z podpisem bool (T const &) , który jest wywoływany przez ten single_assignment blok obsługi komunikatów w celu określenia, czy powinien zaakceptować oferowany komunikat.

~single_assignment

Niszczy blok obsługi komunikatów single_assignment .

~single_assignment();

wartość

Pobiera odwołanie do bieżącego ładunku komunikatu przechowywanego single_assignment w bloku obsługi komunikatów.

T const& value();

Wartość zwracana

Ładunek przechowywanego komunikatu.

Uwagi

Ta metoda będzie czekać na nadejście komunikatu, jeśli w bloku obsługi komunikatów nie jest obecnie przechowywany single_assignment żaden komunikat.

Zobacz też

Przestrzeń nazw współbieżności
overwrite_buffer, klasa
unbounded_buffer, klasa