Kelas source_block

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

ISource

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.

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.

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.

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.

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.

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();

Lihat juga

Namespace layanan konkurensi
Kelas ISource