Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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.
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.
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