Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 tupleoparty 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 acceptmetody , ale zawsze musi być poprzedzona wywołaniem metody , która reserve zwróciła truewartość .
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 reservemetody , 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