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.
Kelas source_block ini adalah kelas dasar abstrak untuk blok sumber saja. Kelas ini menyediakan fungsionalitas manajemen tautan dasar serta pemeriksaan kesalahan umum.
Sintaks
template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;
Parameter
_TargetLinkRegistry
Registri tautan yang akan dipakai untuk menampung tautan target.
_MessageProcessorType
Jenis prosesor untuk pemrosesan pesan.
Anggota
Typedef Publik
| Nama | Deskripsi |
|---|---|
target_iterator |
Iterator untuk menelusuri target yang terhubung. |
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| source_block | Membangun objek source_block. |
| ~source_block Destructor |
source_block Menghancurkan objek. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| terima | Menerima pesan yang ditawarkan oleh objek ini source_block , mentransfer kepemilikan ke pemanggil. |
| acquire_ref | Memperoleh jumlah referensi pada objek ini source_block , untuk mencegah penghapusan. |
| mengonsumsi | Mengonsumsi pesan yang sebelumnya ditawarkan oleh objek ini source_block dan berhasil dicadangkan oleh target, mentransfer kepemilikan ke pemanggil. |
| link_target | Menghubungkan blok target ke objek source_block ini. |
| lepaskan | Membatalkan reservasi pesan yang berhasil sebelumnya. |
| release_ref | Merilis jumlah referensi pada objek ini source_block . |
| cadangan | Memesan pesan yang sebelumnya ditawarkan oleh objek ini source_block . |
| unlink_target | Putuskan tautan blok target dari objek source_block ini. |
| unlink_targets | Putuskan tautan semua blok target dari objek source_block ini. (Menggantikan ISource::unlink_targets.) |
Metode yang Dilindungi
| Nama | Deskripsi |
|---|---|
| accept_message | Ketika diterapkan dalam kelas turunan, menerima dan menyetujui pesan yang ditawarkan oleh sumber. Blok pesan harus mengambil alih metode ini untuk memvalidasi _MsgId dan mengembalikan pesan. |
| async_send | Secara asinkron mengantre pesan dan memulai tugas penyebaran, jika ini belum dilakukan |
| consume_message | Ketika diterapkan di kelas turunan, memproses pesan yang sebelumnya dicadangkan. |
| aktifkan_pemrosesan_terkumpul | Mengaktifkan pemrosesan batch untuk blok ini. |
| initialize_source | Menginisialisasi message_propagator di dalam source_block ini. |
| notifikasi_target_tautan | Panggilan balik yang memberi tahu bahwa target baru telah ditautkan ke objek ini source_block . |
| process_input_messages | Memproses pesan input. Ini hanya berguna untuk blok penyebar, yang berasal dari source_block |
| propagate_output_messages | Menyebarkan pesan ke target. |
| sebarkan_ke_semua_tujuan | Ketika diterapkan di kelas turunan, meneruskan pesan yang diberikan ke salah satu atau semua target yang terhubung. Ini adalah rutinitas penyebaran utama untuk blok pesan. |
| release_message | Ketika diganti dengan kelas turunan, membebaskan reservasi pesan sebelumnya. |
| remove_targets | Menghapus semua tautan target untuk blok sumber ini. Ini harus dipanggil dari destruktor. |
| reserve_message | Ketika ditimpa pada kelas turunan, menyimpan ulang pesan yang sebelumnya ditawarkan oleh objek ini source_block. |
| resume_propagation | Ketika di-override di dalam kelas turunan, melanjutkan penyebaran setelah pelepasan reservasi. |
| sync_send | Secara sinkron mengantre pesan dan memulai tugas penyebaran, jika ini belum dilakukan. |
| unlink_target_notification | Fungsi panggilan balik yang memberi tahu bahwa target telah diputus dari objek ini source_block. |
| tunggu_pengiriman_asinkron_yang_tertunda | Menunggu hingga semua proses asinkron selesai. Penantian putar khusus penyebaran ini digunakan dalam destruktor blok pesan untuk memastikan bahwa semua penyebaran asinkron memiliki waktu untuk menyelesaikan sebelum menghancurkan blok. |
Keterangan
Blok pesan harus berasal dari blok ini untuk memanfaatkan manajemen tautan dan sinkronisasi yang disediakan oleh kelas ini.
Hierarki Pewarisan
source_block
Persyaratan
Header: agents.h
Namespace: konkurensi
Menerima
Menerima pesan yang ditawarkan oleh objek ini source_block , mentransfer kepemilikan ke pemanggil.
virtual message<_Target_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_MsgId
Objek message yang ditawarkan dari runtime_object_identity.
_PTarget
Penunjuk ke blok sasaran yang memanggil metode accept.
Tampilkan Nilai
Penunjuk ke objek message yang dimiliki sekarang oleh pemanggil.
Keterangan
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget adalah NULL.
Metode accept ini dipanggil oleh target saat pesan sedang ditawarkan oleh blok ini ISource . Penunjuk pesan yang dikembalikan mungkin berbeda dari yang diteruskan ke propagate metode ITarget blok, jika sumber ini memutuskan untuk membuat salinan pesan.
terima_pesan
Ketika diterapkan dalam kelas turunan, menerima dan menyetujui pesan yang ditawarkan oleh sumber. Blok pesan harus mengambil alih metode ini untuk memvalidasi _MsgId dan mengembalikan pesan.
virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;
Parameter
_MsgId
Identitas objek runtime message.
Tampilkan Nilai
Penunjuk ke pesan yang sekarang dimiliki pemanggil.
Keterangan
Untuk mentransfer kepemilikan, penunjuk pesan asli harus dikembalikan. Untuk mempertahankan kepemilikan, salinan payload pesan perlu dibuat dan dikembalikan.
acquire_ref
Memperoleh jumlah referensi pada objek ini source_block , untuk mencegah penghapusan.
virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);
Keterangan
Metode ini dipanggil oleh objek ITarget yang sedang ditautkan ke sumber ini selama metode link_target.
async_send
Secara asinkron mengantre pesan dan memulai tugas penyebaran, jika ini belum dilakukan
virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);
Parameter
_Msg
Penunjuk kepada objek message yang akan dikirim secara asinkron.
mengonsumsi
Mengonsumsi pesan yang sebelumnya ditawarkan oleh objek ini source_block dan berhasil dicadangkan oleh target, mentransfer kepemilikan ke pemanggil.
virtual message<_Target_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _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 ini melempar pengecualian invalid_argument jika parameternya _PTarget adalah NULL.
Metode ini melempar pengecualian bad_target jika parameter _PTarget tidak mewakili target yang memanggil reserve.
Metode consume ini mirip dengan accept, tetapi harus selalu didahului oleh panggilan ke reserve yang mengembalikan true.
konsumsi_pesan
Ketika diterapkan di kelas turunan, memproses pesan yang sebelumnya dicadangkan.
virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;
Parameter
_MsgId
Objek runtime_object_identity yang message dikonsumsi.
Tampilkan Nilai
Penunjuk ke pesan yang sekarang dimiliki pemanggil.
Keterangan
Mirip dengan accept, tetapi selalu didahului oleh panggilan ke reserve.
aktifkan_pemrosesan_berkelompok
Mengaktifkan pemrosesan batch untuk blok ini.
void enable_batched_processing();
initialize_source
Menginisialisasi message_propagator di dalam source_block ini.
void initialize_source(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Parameter
_PScheduler
Penjadwal yang akan digunakan untuk menjadwalkan tugas.
_PScheduleGroup
Grup jadwal yang akan digunakan untuk menjadwalkan tugas.
link_target
Menghubungkan blok target ke objek source_block ini.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_PTarget
Penunjuk ke blok ITarget untuk menautkan ke objek source_block ini.
Keterangan
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget adalah NULL.
notifikasi_tujuan_tautan
Panggilan balik yang memberi tahu bahwa target baru telah ditautkan ke objek ini source_block .
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
proses_pesan_masukan
Memproses pesan input. Ini hanya berguna untuk blok penyebar, yang berasal dari source_block
virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);
Parameter
_PMessage
Penunjuk ke pesan yang akan diproses.
propagate_output_messages
Menyebarkan pesan ke target.
virtual void propagate_output_messages();
menyebarkan_ke_semua_target
Ketika diterapkan di kelas turunan, meneruskan pesan yang diberikan ke salah satu atau semua target yang terhubung. Ini adalah rutinitas penyebaran utama untuk blok pesan.
virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);
Parameter
_PMessage
Penunjuk ke pesan yang akan disebarluaskan.
rilis
Membatalkan reservasi pesan yang berhasil sebelumnya.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_MsgId
Bagian runtime_object_identity dari objek message yang dipesan.
_PTarget
Penunjuk ke blok sasaran yang memanggil metode release.
Keterangan
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget adalah NULL.
Metode ini melempar pengecualian bad_target jika parameter _PTarget tidak mewakili target yang memanggil reserve.
pesan_rilis
Ketika diganti dengan kelas turunan, membebaskan reservasi pesan sebelumnya.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Parameter
_MsgId
runtime_object_identity dari objek message yang dilepaskan.
release_ref
Merilis jumlah referensi pada objek ini source_block .
virtual void release_ref(_Inout_ ITarget<_Target_type>* _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.
remove_targets
Menghapus semua tautan target untuk blok sumber ini. Ini harus dipanggil dari destruktor.
void remove_targets();
cadangan
Memesan pesan yang sebelumnya ditawarkan oleh objek ini source_block .
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_MsgId
Objek message yang ditawarkan dari runtime_object_identity.
_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
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget adalah NULL.
Setelah Anda memanggil reserve, jika berhasil, Anda harus memanggil consume atau release untuk memastikan bahwa kepemilikan pesan diambil atau dilepas, masing-masing.
pesan_cadangan
Ketika ditimpa pada kelas turunan, menyimpan ulang pesan yang sebelumnya ditawarkan oleh objek ini source_block.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
Parameter
_MsgId
Objek message dari runtime_object_identity sedang dicadangkan.
Tampilkan Nilai
true jika pesan berhasil dicadangkan, false jika tidak.
Keterangan
Setelah reserve dipanggil, jika mengembalikan true, baik consume atau release harus dipanggil untuk mengambil atau melepaskan kepemilikan pesan.
resume_propagation
Ketika di-override di dalam kelas turunan, melanjutkan penyebaran setelah pelepasan reservasi.
virtual void resume_propagation() = 0;
source_block
Membangun objek source_block.
source_block();
~source_block
source_block Menghancurkan objek.
virtual ~source_block();
sync_send
Secara sinkron mengantre pesan dan memulai tugas penyebaran, jika ini belum dilakukan.
virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);
Parameter
_Msg
Penunjuk ke objek message yang akan dikirim secara sinkron.
unlink_target
Putuskan tautan blok target dari objek source_block ini.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_PTarget
Penunjuk ke ITarget blok untuk melepaskan tautan dari source_block objek ini.
Keterangan
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget adalah NULL.
pemberitahuan_pemutusan_tautan_tujuan
Fungsi panggilan balik yang memberi tahu bahwa target telah diputus dari objek ini source_block.
virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_PTarget
ITarget Blok yang tidak ditautkan.
putuskan_tautan_target
Memutus tautan semua blok target dari objek source_block ini.
virtual void unlink_targets();
menunggu_pengiriman_async_yang_menunggak
Menunggu hingga semua proses asinkron selesai. Penantian putar khusus penyebaran ini digunakan dalam destruktor blok pesan untuk memastikan bahwa semua penyebaran asinkron memiliki waktu untuk menyelesaikan sebelum menghancurkan blok.
void wait_for_outstanding_async_sends();