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
Jenis yang berbasis tuple yang mewakili payload dari sumber-sumber input.

Anggota

Typedef Publik

Nama Deskripsi
type Alias jenis untuk T.

Konstruktor Publik

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

Metode Publik

Nama Deskripsi
terima 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.
mengonsumsi 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 choice ini telah diinisialisasi dengan nilai atau belum.
indeks Mengembalikan indeks ke tuple yang mewakili elemen yang dipilih oleh blok olahpesan choice.
link_target Menautkan blok target ke blok olahpesan ini choice .
lepaskan Membatalkan reservasi pesan yang berhasil sebelumnya.
release_ref Melepaskan hitungan referensi pada blok pesan ini choice.
cadangan Mengamankan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini choice.
unlink_target Memutuskan koneksi blok target dari blok pesan ini choice.
unlink_targets Batalkan tautan semua target dari blok olahpesan ini choice . (Menggantikan ISource::unlink_targets.)
value Mengambil pesan yang indeksnya dipilih oleh blok pesan choice.

Keterangan

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

Untuk informasi selengkapnya, lihat Blok Pesan Asinkron.

Hierarki Pewarisan

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
Objek message yang ditawarkan dari runtime_object_identity.

_PTarget
Penunjuk ke blok sasaran yang memanggil metode accept.

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 objek ITarget yang sedang ditautkan ke sumber ini selama metode link_target.

pilihan

Membuat choice blok pesan.

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

Parameter

_Tuple
Sejumlah tuple sumber untuk pilihan.

_PScheduler
Objek Scheduler di mana tugas propagasi untuk blok olahpesan choice dijadwalkan.

_PScheduleGroup
Objek ScheduleGroup di mana tugas propagasi untuk blok olahpesan choice dijadwalkan. Objek Scheduler yang digunakan dapat disimpulkan dari grup jadwal.

_Pilihan
choice Blok pesan 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 dalam kondisi terkunci, yang berarti pengguna harus memastikan bahwa tidak ada tugas ringan yang sedang berjalan pada saat itu. Jika tidak, banyak ras dapat terjadi, yang mengarah ke pengecualian atau status yang tidak konsisten.

~pilihan

Menghancurkan blok pesan choice.

~choice();

mengonsumsi

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
Bagian runtime_object_identity dari objek message yang dipesan.

_PTarget
Penunjuk ke blok sasaran yang memanggil metode consume.

Tampilkan Nilai

Penunjuk ke objek message yang dimiliki sekarang oleh pemanggil.

Keterangan

Metode consume ini mirip dengan accept, tetapi harus selalu didahului oleh panggilan ke reserve yang mengembalikan true.

memiliki_nilai

Memeriksa apakah blok olahpesan choice ini telah diinisialisasi dengan nilai atau belum.

bool has_value() const;

Tampilkan Nilai

true jika blok telah menerima nilai, false jika tidak.

indeks

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

size_t index();

Tampilkan Nilai

Indeks pesan.

Keterangan

Payload pesan dapat diekstrak dengan metode get.

Menautkan blok target ke blok olahpesan ini choice .

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

Parameter

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

rilis

Membatalkan reservasi pesan yang berhasil sebelumnya.

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

Parameter

_MsgId
runtime_object_identity dari objek message yang dilepaskan.

_PTarget
Penunjuk ke blok sasaran yang memanggil metode release.

release_ref

Melepaskan hitungan referensi pada blok pesan 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 objek ITarget yang sedang dilepaskan tautannya dari sumber ini. Blok sumber diperbolehkan melepaskan sumber daya apa pun yang dicadangkan untuk blok target.

cadangan

Mengamankan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini choice.

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

Parameter

_MsgId
Objek message dari runtime_object_identity sedang dicadangkan.

_PTarget
Penunjuk ke blok sasaran yang memanggil metode reserve.

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 consume atau release untuk memastikan bahwa kepemilikan pesan diambil atau dilepas, masing-masing.

Memutuskan koneksi blok target dari blok pesan ini choice.

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

Parameter

_PTarget
Penunjuk ke blok ITarget untuk memutuskan tautan dari blok pesan 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 menghapus tautan dengan benar.

nilai

Mengambil pesan yang indeksnya dipilih oleh blok pesan choice.

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

Parameter

_Payload_type
Jenis dari payload pesan.

Tampilkan Nilai

Payload dari 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 .

Lihat juga

Namespace layanan konkurensi
bergabung dengan Kelas
Kelas single_assignment