Udostępnij za pośrednictwem


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

ISource

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 .

Łą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.

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.

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