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
tuple
Jenis 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
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 accept
dengan , 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 .
Baca juga
Namespace layanan konkurensi
bergabung dengan Kelas
Kelas single_assignment
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk