Klasa wyboru
choice
Blok obsługi komunikatów to blok wieloźródłowy, pojedynczy element docelowy reprezentujący interakcję przepływu sterowania z zestawem źródeł. Blok wyboru będzie czekać na każde z wielu źródeł, aby utworzyć komunikat i będzie propagować indeks źródła, który wygenerował komunikat.
Składnia
template<
class T
>
class choice: public ISource<size_t>;
Parametry
T
Typ tuple
oparty na typie reprezentującym ładunki źródeł wejściowych.
Elementy członkowskie
Definicje typów publicznych
Nazwa/nazwisko | opis |
---|---|
type |
Alias typu dla elementu T . |
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
wybór | Przeciążone. choice Tworzy blok obsługi komunikatów. |
~choice, destruktor | Niszczy blok obsługi komunikatów choice . |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
akceptować | Akceptuje komunikat oferowany przez ten choice blok, przenosząc własność na obiekt wywołujący. |
acquire_ref | Uzyskuje liczbę odwołań w tym choice bloku obsługi komunikatów, aby zapobiec usunięciu. |
konsumować | Używa komunikatu oferowanego wcześniej przez ten choice blok obsługi komunikatów i pomyślnie zarezerwowany przez obiekt docelowy, przenosząc własność do obiektu wywołującego. |
has_value | Sprawdza, czy ten choice blok obsługi komunikatów został jeszcze zainicjowany z wartością. |
indeks | Zwraca indeks do tuple elementu reprezentującego wybrany przez blok obsługi komunikatów choice . |
link_target | Łączy blok docelowy z tym choice blokiem obsługi komunikatów. |
zwolnić | Zwalnia poprzednią pomyślną rezerwację komunikatów. |
release_ref | Zwalnia liczbę odwołań dla tego choice bloku obsługi komunikatów. |
rezerwować | Rezerwuje komunikat, który był wcześniej oferowany przez ten choice blok obsługi komunikatów. |
unlink_target | Odłącza blok docelowy od tego choice bloku obsługi komunikatów. |
unlink_targets | Odłącza wszystkie obiekty docelowe z tego choice bloku obsługi komunikatów. (Przesłonięcia) ISource::unlink_targets.) |
wartość | Pobiera komunikat, którego indeks został wybrany przez blok obsługi komunikatów choice . |
Uwagi
Blok wyboru gwarantuje, że jest używany tylko jeden z przychodzących komunikatów.
Aby uzyskać więcej informacji, zobacz Asynchroniczne bloki komunikatów.
Hierarchia dziedziczenia
choice
Wymagania
Nagłówek: agents.h
Przestrzeń nazw: współbieżność
akceptuj
Akceptuje komunikat oferowany przez ten choice
blok, przenosząc własność na obiekt wywołujący.
virtual message<size_t>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametry
_MsgId
Obiekt runtime_object_identity
oferowany message
.
_PTarget
Wskaźnik do bloku docelowego wywołującego metodę accept
.
Wartość zwracana
Wskaźnik do komunikatu, że obiekt wywołujący ma teraz własność.
acquire_ref
Uzyskuje liczbę odwołań w tym choice
bloku obsługi komunikatów, aby zapobiec usunięciu.
virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);
Parametry
_PTarget
Wskaźnik do bloku docelowego wywołującego tę metodę.
Uwagi
Ta metoda jest wywoływana przez ITarget
obiekt połączony z tym źródłem podczas link_target
metody .
opcja wyboru
choice
Tworzy blok obsługi komunikatów.
explicit choice(
T _Tuple);
choice(
Scheduler& _PScheduler,
T _Tuple);
choice(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
choice(
choice&& _Choice);
Parametry
_Krotka
Źródło tuple
do wyboru.
_PScheduler
Obiekt Scheduler
, w którym zaplanowano zadanie choice
propagacji bloku obsługi komunikatów.
_PScheduleGroup
Obiekt ScheduleGroup
, w którym zaplanowano zadanie choice
propagacji bloku obsługi komunikatów. Używany Scheduler
obiekt jest dorozumiany przez grupę harmonogramu.
_Wybór
choice
Blok obsługi komunikatów do skopiowania. Należy pamiętać, że oryginalny obiekt jest oddzielony, dzięki czemu jest to konstruktor przenoszenia.
Uwagi
Jeśli nie określisz parametrów lub_PScheduleGroup
, środowisko uruchomieniowe używa domyślnego _PScheduler
harmonogramu.
Budowa przenoszenia nie jest wykonywana w ramach blokady, co oznacza, że jest to do użytkownika, aby upewnić się, że w czasie przenoszenia nie ma lekkich zadań w locie. W przeciwnym razie może wystąpić wiele wyścigów, co prowadzi do wyjątków lub niespójnego stanu.
~wybór
Niszczy blok obsługi komunikatów choice
.
~choice();
consume
Używa komunikatu oferowanego wcześniej przez ten choice
blok obsługi komunikatów i pomyślnie zarezerwowany przez obiekt docelowy, przenosząc własność do obiektu wywołującego.
virtual message<size_t>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametry
_MsgId
Obiekt runtime_object_identity
zarezerwowany message
.
_PTarget
Wskaźnik do bloku docelowego wywołującego metodę consume
.
Wartość zwracana
Wskaźnik do message
obiektu, którego obiekt wywołujący ma teraz własność.
Uwagi
Metoda jest podobna consume
do accept
metody , ale zawsze musi być poprzedzona wywołaniem metody , która reserve
zwróciła true
wartość .
has_value
Sprawdza, czy ten choice
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.
index
Zwraca indeks do tuple
elementu reprezentującego wybrany przez blok obsługi komunikatów choice
.
size_t index();
Wartość zwracana
Indeks komunikatów.
Uwagi
Ładunek komunikatu można wyodrębnić przy użyciu get
metody .
link_target
Łączy blok docelowy z tym choice
blokiem obsługi komunikatów.
virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);
Parametry
_PTarget
Wskaźnik do ITarget
bloku, aby połączyć się z tym choice
blokiem obsługi komunikatów.
zwolnić
Zwalnia poprzednią pomyślną rezerwację komunikatów.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametry
_MsgId
message
Obiektruntime_object_identity
, który jest zwalniany.
_PTarget
Wskaźnik do bloku docelowego wywołującego metodę release
.
release_ref
Zwalnia liczbę odwołań dla tego choice
bloku obsługi komunikatów.
virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);
Parametry
_PTarget
Wskaźnik do bloku docelowego wywołującego tę metodę.
Uwagi
Ta metoda jest wywoływana przez ITarget
obiekt, który jest odłączony od tego źródła. Blok źródłowy może zwolnić wszystkie zasoby zarezerwowane dla bloku docelowego.
rezerwować
Rezerwuje komunikat, który był wcześniej oferowany przez ten choice
blok obsługi komunikatów.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametry
_MsgId
Obiekt runtime_object_identity
message
, który jest zarezerwowany.
_PTarget
Wskaźnik do bloku docelowego wywołującego metodę reserve
.
Wartość zwracana
true
jeśli wiadomość została pomyślnie zarezerwowana, false
w przeciwnym razie. Rezerwacje mogą zakończyć się niepowodzeniem z wielu powodów, w tym: komunikat został już zarezerwowany lub zaakceptowany przez inny obiekt docelowy, źródło może odmówić rezerwacji itd.
Uwagi
Po wywołaniu reserve
metody , jeśli się powiedzie, musisz zadzwonić consume
do lub release
w celu podjęcia lub rezygnacji z posiadania wiadomości, odpowiednio.
unlink_target
Odłącza blok docelowy od tego choice
bloku obsługi komunikatów.
virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);
Parametry
_PTarget
Wskaźnik do ITarget
bloku, aby odłączyć się od tego choice
bloku obsługi komunikatów.
unlink_targets
Odłącza wszystkie obiekty docelowe z tego choice
bloku obsługi komunikatów.
virtual void unlink_targets();
Uwagi
Ta metoda nie musi być wywoływana z destruktora, ponieważ destruktor dla bloku wewnętrznego single_assignment
będzie prawidłowo odłączać.
wartość
Pobiera komunikat, którego indeks został wybrany przez blok obsługi komunikatów choice
.
template <
typename _Payload_type
>
_Payload_type const& value();
Parametry
_Payload_type
Typ ładunku komunikatu.
Wartość zwracana
Ładunek komunikatu.
Uwagi
choice
Ponieważ blok obsługi komunikatów może przyjmować dane wejściowe z różnymi typami ładunków, należy określić typ ładunku w punkcie pobierania. Typ można określić na podstawie wyniku index
metody.
Zobacz też
Przestrzeń nazw współbieżności
join, klasa
single_assignment, klasa