kelas pilihan

choice Blok olahpesan adalah blok target tunggal multi-sumber yang mewakili interaksi aliran kontrol dengan sekumpulan sumber. Blok pilihan akan menunggu salah satu dari beberapa sumber menghasilkan pesan dan akan menyebarluaskan indeks sumber yang menghasilkan pesan.

Sintaks

template<
    class T
>
class choice: public ISource<size_t>;

Parameter

T
tupleJenis berbasis yang mewakili payload sumber input.

Anggota

Typedef Publik

Nama Deskripsi
type Alias jenis untuk T.

Konstruktor Publik

Nama Deskripsi
Pilihan Kelebihan beban. Membuat choice blok olahpesan.
~pilihan Destructor choice Menghancurkan blok olahpesan.

Metode Publik

Nama Deskripsi
Menerima Menerima pesan yang ditawarkan oleh blok ini choice , mentransfer kepemilikan ke pemanggil.
acquire_ref Memperoleh jumlah referensi pada blok olahpesan ini choice , untuk mencegah penghapusan.
Mengkonsumsi Mengonsumsi pesan yang sebelumnya ditawarkan oleh blok olahpesan ini choice dan berhasil dicadangkan oleh target, mentransfer kepemilikan ke pemanggil.
has_value Memeriksa apakah blok olahpesan ini choice telah diinisialisasi dengan nilai.
index Mengembalikan indeks ke tuple dalam elemen yang dipilih oleh choice blok olahpesan.
link_target Menautkan blok target ke blok olahpesan ini choice .
Rilis Merilis reservasi pesan yang berhasil sebelumnya.
release_ref Merilis jumlah referensi pada blok olahpesan ini choice .
Reserve Memesan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini choice .
unlink_target Batalkan tautan blok target dari blok olahpesan ini choice .
unlink_targets Batalkan tautan semua target dari blok olahpesan ini choice . (Penimpaan ISource::unlink_targets.)
value Mendapatkan pesan yang indeksnya dipilih oleh choice blok olahpesan.

Keterangan

Blok pilihan memastikan bahwa hanya salah satu pesan masuk yang digunakan.

Untuk informasi selengkapnya, lihat Blok Pesan Asinkron.

Hierarki Warisan

ISource

choice

Persyaratan

Header: agents.h

Namespace: konkurensi

Menerima

Menerima pesan yang ditawarkan oleh blok ini choice , mentransfer kepemilikan ke pemanggil.

virtual message<size_t>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parameter

_MsgId
Dari runtime_object_identity objek yang ditawarkan message .

_PTarget
Penunjuk ke blok target yang memanggil accept metode .

Tampilkan Nilai

Penunjuk ke pesan yang sekarang dimiliki pemanggil.

acquire_ref

Memperoleh jumlah referensi pada blok olahpesan ini choice , untuk mencegah penghapusan.

virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);

Parameter

_PTarget
Penunjuk ke blok target yang memanggil metode ini.

Keterangan

Metode ini dipanggil oleh ITarget objek yang sedang ditautkan ke sumber ini selama link_target metode .

pilihan

Membuat choice blok olahpesan.

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

Parameter

_Tuple
Sumber tuple untuk pilihan.

_PScheduler
Objek Scheduler tempat tugas penyebaran untuk choice blok olahpesan dijadwalkan.

_PScheduleGroup
Objek ScheduleGroup tempat tugas penyebaran untuk choice blok olahpesan dijadwalkan. Objek Scheduler yang digunakan tersirat oleh grup jadwal.

_Pilihan
choice Blok olahpesan untuk disalin. Perhatikan bahwa objek asli yatim piatu, menjadikan ini konstruktor pemindahan.

Keterangan

Runtime menggunakan penjadwal default jika Anda tidak menentukan _PScheduler parameter atau _PScheduleGroup .

Konstruksi pemindahan tidak dilakukan di bawah kunci, yang berarti bahwa terserah pengguna untuk memastikan bahwa tidak ada tugas ringan dalam penerbangan pada saat bergerak. Jika tidak, banyak ras dapat terjadi, yang mengarah ke pengecualian atau status yang tidak konsisten.

~Pilihan

choice Menghancurkan blok olahpesan.

~choice();

mengkonsumsi

Mengonsumsi pesan yang sebelumnya ditawarkan oleh blok olahpesan ini choice dan berhasil dicadangkan oleh target, mentransfer kepemilikan ke pemanggil.

virtual message<size_t>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parameter

_MsgId
Objek runtime_object_identity yang dipesan message .

_PTarget
Penunjuk ke blok target yang memanggil consume metode .

Tampilkan Nilai

Penunjuk ke message objek yang sekarang dimiliki pemanggil.

Keterangan

Metode consume ini mirip acceptdengan , tetapi harus selalu didahului oleh panggilan ke reserve yang dikembalikan true.

has_value

Memeriksa apakah blok olahpesan ini choice telah diinisialisasi dengan nilai.

bool has_value() const;

Tampilkan Nilai

true jika blok telah menerima nilai, false jika tidak.

index

Mengembalikan indeks ke tuple dalam elemen yang dipilih oleh choice blok olahpesan.

size_t index();

Tampilkan Nilai

Indeks pesan.

Keterangan

Payload pesan dapat diekstrak menggunakan get metode .

Menautkan blok target ke blok olahpesan ini choice .

virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);

Parameter

_PTarget
Penunjuk ke ITarget blok untuk menautkan ke blok olahpesan ini choice .

rilis

Merilis reservasi pesan yang berhasil sebelumnya.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parameter

_MsgId
Objek runtime_object_identity yang message dilepaskan.

_PTarget
Penunjuk ke blok target yang memanggil release metode .

release_ref

Merilis jumlah referensi pada blok olahpesan ini choice .

virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);

Parameter

_PTarget
Penunjuk ke blok target yang memanggil metode ini.

Keterangan

Metode ini dipanggil oleh ITarget objek yang sedang dilepas tautannya dari sumber ini. Blok sumber diizinkan untuk merilis sumber daya apa pun yang dicadangkan untuk blok target.

Reserve

Memesan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini choice .

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _PTarget);

Parameter

_MsgId
Objek runtime_object_identity yang message sedang dicadangkan.

_PTarget
Penunjuk ke blok target yang memanggil reserve metode .

Tampilkan Nilai

true jika pesan berhasil dicadangkan, false jika tidak. Reservasi dapat gagal karena banyak alasan, termasuk: pesan sudah dicadangkan atau diterima oleh target lain, sumber dapat menolak reservasi, dan sebagainya.

Keterangan

Setelah Anda memanggil reserve, jika berhasil, Anda harus memanggil baik consume atau release untuk mengambil atau menyerah kepemilikan pesan, masing-masing.

Batalkan tautan blok target dari blok olahpesan ini choice .

virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);

Parameter

_PTarget
Penunjuk ke ITarget blok untuk membatalkan tautan dari blok olahpesan ini choice .

Batalkan tautan semua target dari blok olahpesan ini choice .

virtual void unlink_targets();

Keterangan

Metode ini tidak perlu dipanggil dari destruktor karena destruktor untuk blok internal single_assignment akan membatalkan tautan dengan benar.

value

Mendapatkan pesan yang indeksnya dipilih oleh choice blok olahpesan.

template <
    typename _Payload_type
>
_Payload_type const& value();

Parameter

_Payload_type
Jenis payload pesan.

Tampilkan Nilai

Payload pesan.

Keterangan

choice Karena blok olahpesan dapat mengambil input dengan jenis payload yang berbeda, Anda harus menentukan jenis payload pada titik pengambilan. Anda dapat menentukan jenis berdasarkan hasil index metode .

Baca juga

Namespace layanan konkurensi
bergabung dengan Kelas
Kelas single_assignment