Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
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.
link_target
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.
unlink_target
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.
putuskan_tautan_target
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