Bagikan melalui


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

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
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 acceptdengan , 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 acceptdengan , 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.

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.

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.

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.

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.

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

Lihat juga

Namespace layanan konkurensi
Kelas ISource