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
Tautkan registri yang akan digunakan untuk menyimpan tautan target.
_MessageProcessorType
Jenis prosesor untuk pemrosesan pesan.
Anggota
Typedef Publik
Nama | Deskripsi |
---|---|
target_iterator |
Iterator untuk memanjat target yang terhubung. |
Konstruktor Publik
Nama | Deskripsi |
---|---|
source_block | Membuat source_block objek. |
~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. |
minum | Mengonsumsi pesan yang sebelumnya ditawarkan oleh objek ini source_block dan berhasil dicadangkan oleh target, mentransfer kepemilikan ke pemanggil. |
link_target | Menautkan blok target ke objek ini source_block . |
lepaskan | Merilis reservasi pesan yang berhasil sebelumnya. |
release_ref | Merilis jumlah referensi pada objek ini source_block . |
reserve | Memesan pesan yang sebelumnya ditawarkan oleh objek ini source_block . |
unlink_target | Batalkan tautan blok target dari objek ini source_block . |
unlink_targets | Batalkan tautan semua blok target dari objek ini source_block . (Penimpaan ISource::unlink_targets.) |
Metode yang Dilindungi
Nama | Deskripsi |
---|---|
accept_message | Saat ditimpa di kelas turunan, menerima pesan yang ditawarkan oleh sumbernya. 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 ditimpa di kelas turunan, mengonsumsi pesan yang sebelumnya dicadangkan. |
enable_batched_processing | Mengaktifkan pemrosesan batch untuk blok ini. |
initialize_source | Menginisialisasi dalam message_propagator ini source_block . |
link_target_notification | 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. |
propagate_to_any_targets | Saat ditimpa di kelas turunan, menyebarluaskan pesan yang diberikan ke salah satu atau semua target yang ditautkan. Ini adalah rutinitas penyebaran utama untuk blok pesan. |
release_message | Saat ditimpa di kelas turunan, merilis reservasi pesan sebelumnya. |
remove_targets | Menghapus semua tautan target untuk blok sumber ini. Ini harus dipanggil dari destruktor. |
reserve_message | Ketika ditimpa di kelas turunan, pesan yang sebelumnya ditawarkan oleh objek ini source_block . |
resume_propagation | Ketika ditimpa di kelas turunan, melanjutkan penyebaran setelah reservasi dirilis. |
sync_send | Secara sinkron mengantre pesan dan memulai tugas penyebaran, jika ini belum dilakukan. |
unlink_target_notification | Panggilan balik yang memberi tahu bahwa target telah dibatalkan tautannya dari objek ini source_block . |
wait_for_outstanding_async_sends | Menunggu semua penyebaran 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 Warisan
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
Dari runtime_object_identity
objek yang ditawarkan message
.
_PTarget
Penunjuk ke blok target yang memanggil accept
metode .
Tampilkan Nilai
Penunjuk ke message
objek yang sekarang dimiliki 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.
accept_message
Saat ditimpa di kelas turunan, menerima pesan yang ditawarkan oleh sumbernya. 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 message
objek runtime objek.
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 ITarget
objek yang sedang ditautkan ke sumber ini selama link_target
metode .
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 ke message
objek untuk dikirim secara asinkron.
mengkonsumsi
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
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 ini melempar pengecualian invalid_argument jika parameternya _PTarget
adalah NULL
.
Metode ini melempar pengecualian bad_target jika parameter _PTarget
tidak mewakili target yang disebut reserve
.
Metode consume
ini mirip accept
dengan , tetapi harus selalu didahului oleh panggilan ke reserve
yang dikembalikan true
.
consume_message
Ketika ditimpa di kelas turunan, mengonsumsi 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 accept
dengan , tetapi selalu didahului oleh panggilan ke reserve
.
enable_batched_processing
Mengaktifkan pemrosesan batch untuk blok ini.
void enable_batched_processing();
initialize_source
Menginisialisasi dalam message_propagator
ini source_block
.
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
Menautkan blok target ke objek ini source_block
.
virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_PTarget
Penunjuk ke ITarget
blok untuk menautkan ke objek ini source_block
.
Keterangan
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget
adalah NULL
.
link_target_notification
Panggilan balik yang memberi tahu bahwa target baru telah ditautkan ke objek ini source_block
.
virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);
process_input_messages
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();
propagate_to_any_targets
Saat ditimpa di kelas turunan, menyebarluaskan pesan yang diberikan ke salah satu atau semua target yang ditautkan. 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
Merilis reservasi pesan yang berhasil sebelumnya.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_MsgId
Objek runtime_object_identity
yang dipesan message
.
_PTarget
Penunjuk ke blok target yang memanggil release
metode .
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 disebut reserve
.
release_message
Saat ditimpa di kelas turunan, merilis reservasi pesan sebelumnya.
virtual void release_message(runtime_object_identity _MsgId) = 0;
Parameter
_MsgId
Objek runtime_object_identity
yang message
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 ITarget
objek yang sedang dilepas tautannya dari sumber ini. Blok sumber diizinkan untuk merilis 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();
reserve
Memesan pesan yang sebelumnya ditawarkan oleh objek ini source_block
.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_MsgId
Dari runtime_object_identity
objek yang ditawarkan message
.
_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
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget
adalah NULL
.
Setelah Anda memanggil reserve
, jika berhasil, Anda harus memanggil baik consume
atau release
untuk mengambil atau menyerah kepemilikan pesan, masing-masing.
reserve_message
Ketika ditimpa di kelas turunan, pesan yang sebelumnya ditawarkan oleh objek ini source_block
.
virtual bool reserve_message(runtime_object_identity _MsgId) = 0;
Parameter
_MsgId
Objek runtime_object_identity
yang message
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 ditimpa di kelas turunan, melanjutkan penyebaran setelah reservasi dirilis.
virtual void resume_propagation() = 0;
source_block
Membuat source_block
objek.
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 untuk message
dikirim secara sinkron.
unlink_target
Batalkan tautan blok target dari objek ini source_block
.
virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_PTarget
Penunjuk ke ITarget
blok untuk membatalkan tautan dari objek ini source_block
.
Keterangan
Metode ini melempar pengecualian invalid_argument jika parameternya _PTarget
adalah NULL
.
unlink_target_notification
Panggilan balik yang memberi tahu bahwa target telah dibatalkan tautannya dari objek ini source_block
.
virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);
Parameter
_PTarget
ITarget
Blok yang tidak ditautkan.
unlink_targets
Batalkan tautan semua blok target dari objek ini source_block
.
virtual void unlink_targets();
wait_for_outstanding_async_sends
Menunggu semua penyebaran 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();