Klasa unbounded_buffer
Blok unbounded_buffer
obsługi komunikatów to wielokierunkowy, wieloźródłowy, uporządkowany propagator_block
w stanie przechowywać niezwiązaną liczbę komunikatów.
Składnia
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
Parametry
_Typ
Typ ładunku komunikatów przechowywanych i propagowanych przez bufor.
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
unbounded_buffer | Przeciążone. unbounded_buffer Tworzy blok obsługi komunikatów. |
~unbounded_buffer Destruktor | Niszczy blok obsługi komunikatów unbounded_buffer . |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
dequeue | Usuwa element z bloku obsługi komunikatów unbounded_buffer . |
enqueue | Dodaje element do bloku obsługi komunikatów unbounded_buffer . |
Metody chronione
Nazwa/nazwisko | opis |
---|---|
accept_message | Akceptuje komunikat oferowany przez ten unbounded_buffer blok obsługi komunikatów, przenosząc własność na obiekt wywołujący. |
consume_message | Używa komunikatu oferowanego wcześniej przez unbounded_buffer blok obsługi komunikatów i zarezerwowany przez obiekt docelowy, przenosząc własność 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 unbounded_buffer blokiem obsługi komunikatów. |
process_input_messages | Umieszcza element message _PMessage w tym unbounded_buffer bloku obsługi komunikatów i próbuje zaoferować go wszystkim połączonym obiektom docelowym. |
propagate_message | Asynchronicznie przekazuje komunikat z ISource bloku do tego unbounded_buffer bloku obsługi komunikatów. Jest wywoływana przez metodę propagate , gdy jest wywoływana przez blok źródłowy. |
propagate_output_messages | Umieszcza element message _PMessage w tym unbounded_buffer bloku obsługi komunikatów i próbuje zaoferować go wszystkim połączonym obiektom docelowym. (Przesłonięcia source_block::p ropagate_output_messages). |
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 unbounded_buffer 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 unbounded_buffer bloku obsługi komunikatów. Jest wywoływana przez metodę send , gdy jest wywoływana przez blok źródłowy. |
supports_anonymous_source | Zastępuje metodę supports_anonymous_source , aby wskazać, że ten blok może akceptować komunikaty oferowane przez źródło, które nie jest połączone. (Przesłonięcia) ITarget::supports_anonymous_source.) |
Aby uzyskać więcej informacji, zobacz Asynchroniczne bloki komunikatów.
Hierarchia dziedziczenia
unbounded_buffer
Wymagania
Nagłówek: agents.h
Przestrzeń nazw: współbieżność
accept_message
Akceptuje komunikat oferowany przez ten unbounded_buffer
blok obsługi komunikatów, przenosząc własność na obiekt wywołujący.
virtual message<_Type> * 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ść.
consume_message
Używa komunikatu oferowanego wcześniej przez unbounded_buffer
blok obsługi komunikatów i zarezerwowany przez obiekt docelowy, przenosząc własność do obiektu wywołującego.
virtual message<_Type> * 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 accept
element , ale zawsze jest poprzedzony wywołaniem metody reserve
.
dequeue
Usuwa element z bloku obsługi komunikatów unbounded_buffer
.
_Type dequeue();
Wartość zwracana
Ładunek komunikatu usuniętego z elementu unbounded_buffer
.
enqueue
Dodaje element do bloku obsługi komunikatów unbounded_buffer
.
bool enqueue(
_Type const& _Item
);
Parametry
_Przedmiot
Element do dodania.
Wartość zwracana
true
jeśli element został zaakceptowany, false
w przeciwnym razie.
link_target_notification
Wywołanie zwrotne, które powiadamia o tym, że nowy element docelowy został połączony z tym unbounded_buffer
blokiem obsługi komunikatów.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
Parametry
_PTarget
Wskaźnik do nowo połączonego elementu docelowego.
propagate_message
Asynchronicznie przekazuje komunikat z ISource
bloku do tego unbounded_buffer
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<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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_output_messages
Umieszcza element message
_PMessage
w tym unbounded_buffer
bloku obsługi komunikatów i próbuje zaoferować go wszystkim połączonym obiektom docelowym.
virtual void propagate_output_messages();
Uwagi
Jeśli inny komunikat jest już przed tym w elemecie unbounded_buffer
, propagacja do połączonych obiektów docelowych nie nastąpi, dopóki żadne wcześniejsze komunikaty nie zostaną zaakceptowane lub zużyte. Pierwszy połączony element docelowy pomyślnie accept
lub consume
komunikat przejmuje własność, a żaden inny element docelowy nie może następnie pobrać komunikatu.
process_input_messages
Umieszcza element message
_PMessage
w tym unbounded_buffer
bloku obsługi komunikatów i próbuje zaoferować go wszystkim połączonym obiektom docelowym.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Parametry
_PMessage
Wskaźnik do komunikatu, który ma zostać przetworzony.
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 unbounded_buffer
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 true
wartość , 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 unbounded_buffer
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<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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.
supports_anonymous_source
Zastępuje metodę supports_anonymous_source
, aby wskazać, że ten blok może akceptować komunikaty oferowane przez źródło, które nie jest połączone.
virtual bool supports_anonymous_source();
Wartość zwracana
true
ponieważ blok nie odłoży oferowanych wiadomości.
unbounded_buffer
unbounded_buffer
Tworzy blok obsługi komunikatów.
unbounded_buffer();
unbounded_buffer(
filter_method const& _Filter
);
unbounded_buffer(
Scheduler& _PScheduler
);
unbounded_buffer(
Scheduler& _PScheduler,
filter_method const& _Filter
);
unbounded_buffer(
ScheduleGroup& _PScheduleGroup
);
unbounded_buffer(
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 unbounded_buffer
propagacji bloku obsługi komunikatów.
_PScheduleGroup
Obiekt ScheduleGroup
, w którym zaplanowano zadanie unbounded_buffer
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 (_Type const &)
, który jest wywoływany przez ten unbounded_buffer
blok obsługi komunikatów w celu określenia, czy powinien zaakceptować oferowany komunikat.
~unbounded_buffer
Niszczy blok obsługi komunikatów unbounded_buffer
.
~unbounded_buffer();
Zobacz też
Przestrzeń nazw współbieżności
overwrite_buffer, klasa
single_assignment, klasa