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
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 |
|---|---|
| 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. |
| minum | 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 . |
| lepaskan | 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
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 .
link_target
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.
unlink_target
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 .
unlink_targets
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 .
Lihat juga
Namespace layanan konkurensi
bergabung dengan Kelas
Kelas single_assignment