Bagikan melalui


Kelas overwrite_buffer

overwrite_buffer Blok pesan adalah komponen multi-target, multi-sumber, diurutkan, dan mampu menyimpan satu pesan pada satu waktu propagator_block. Pesan baru mengganti pesan yang sebelumnya disimpan.

Sintaks

template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Parameter

T
Jenis payload dari pesan yang disimpan dan disebarkan oleh buffer.

Anggota

Konstruktor Publik

Nama Deskripsi
overwrite_buffer Kelebihan beban. Membangun overwrite_buffer blok pesan.
~overwrite_buffer Destructor Menghancurkan blok pesan overwrite_buffer.

Metode Publik

Nama Deskripsi
has_value Memeriksa apakah blok pesan ini overwrite_buffer sudah memiliki nilai.
value Mendapatkan referensi ke payload saat ini dari pesan yang disimpan di blok olahpesan overwrite_buffer.

Metode yang Dilindungi

Nama Deskripsi
accept_message Menerima pesan yang ditawarkan oleh blok olahpesan ini overwrite_buffer , mengembalikan salinan pesan ke pemanggil.
consume_message Mengonsumsi pesan yang sebelumnya ditawarkan oleh overwrite_buffer blok olahpesan dan dicadangkan oleh target, mengembalikan salinan pesan ke pemanggil.
notifikasi_target_tautan Sebuah callback yang memberi tahu bahwa target baru telah ditautkan ke blok pesan ini overwrite_buffer.
propagate_message Secara asinkron meneruskan pesan dari ISource blok ke blok olahpesan ini overwrite_buffer . Ini dipanggil oleh metode propagate ketika dipanggil oleh blok sumber.
sebarkan_ke_semua_tujuan Tempatkan message _PMessage di blok olahpesan ini overwrite_buffer dan tawarkan ke semua target yang ditautkan.
release_message Menghapus reservasi pesan yang sebelumnya. (Mengganti source_block::release_message.)
reserve_message Mengamankan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini overwrite_buffer. (Mengganti source_block::reserve_message.)
resume_propagation Melanjutkan proses penyebaran setelah reservasi dilepaskan. (Mengambil alih source_block::resume_propagation.)
send_message Secara sinkron meneruskan pesan dari ISource blok ke blok olahpesan ini overwrite_buffer . Ini dipanggil oleh metode send ketika dipanggil oleh blok sumber.
mendukung_sumber_anonim Mengganti metode supports_anonymous_source untuk menunjukkan bahwa blok ini dapat menerima pesan yang ditawarkan oleh sumber yang tidak ditautkan. (Menggantikan ITarget::supports_anonymous_source.)

Keterangan

Blok overwrite_buffer olahpesan menyebarluaskan salinan pesan tersimpannya ke setiap targetnya.

Untuk informasi selengkapnya, lihat Blok Pesan Asinkron.

Hierarki Pewarisan

ISource

ITarget

source_block

propagator_block

overwrite_buffer

Persyaratan

Header: agents.h

Namespace: konkurensi

terima_pesan

Menerima pesan yang ditawarkan oleh blok olahpesan ini overwrite_buffer , mengembalikan salinan pesan ke pemanggil.

virtual message<T>* accept_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Objek message yang ditawarkan dari runtime_object_identity.

Tampilkan Nilai

Penunjuk ke objek message yang dimiliki sekarang oleh pemanggil.

Keterangan

Blok overwrite_buffer olahpesan mengembalikan salinan pesan ke targetnya, daripada mentransfer kepemilikan pesan yang saat ini disimpan.

konsumsi_pesan

Mengonsumsi pesan yang sebelumnya ditawarkan oleh overwrite_buffer blok olahpesan dan dicadangkan oleh target, mengembalikan salinan pesan ke pemanggil.

virtual message<T>* consume_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Objek runtime_object_identity yang message dikonsumsi.

Tampilkan Nilai

Penunjuk ke objek message yang dimiliki sekarang oleh pemanggil.

Keterangan

Mirip dengan accept, tetapi selalu didahului oleh panggilan ke reserve.

memiliki_nilai

Memeriksa apakah blok pesan ini overwrite_buffer sudah memiliki nilai.

bool has_value() const;

Tampilkan Nilai

true jika blok telah menerima nilai, false jika tidak.

Sebuah callback yang memberi tahu bahwa target baru telah ditautkan ke blok pesan ini overwrite_buffer.

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

Parameter

_PTarget
Penunjuk menuju target yang baru saja ditautkan.

~overwrite_buffer

Menghancurkan blok pesan overwrite_buffer.

~overwrite_buffer();

overwrite_buffer

Membangun overwrite_buffer blok pesan.

overwrite_buffer();

overwrite_buffer(
    filter_method const& _Filter);

overwrite_buffer(
    Scheduler& _PScheduler);

overwrite_buffer(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

overwrite_buffer(
    ScheduleGroup& _PScheduleGroup);

overwrite_buffer(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

Parameter

_Filter
Fungsi filter yang menentukan apakah pesan yang ditawarkan harus diterima.

_PScheduler
Objek Scheduler di mana tugas propagasi untuk blok olahpesan overwrite_buffer dijadwalkan.

_PScheduleGroup
Objek ScheduleGroup di mana tugas propagasi untuk blok olahpesan overwrite_buffer dijadwalkan. Objek Scheduler yang digunakan dapat disimpulkan dari grup jadwal.

Keterangan

Runtime menggunakan penjadwal default jika Anda tidak menentukan _PScheduler parameter atau _PScheduleGroup .

Jenis filter_method adalah funktor dengan tanda tangan bool (T const &) yang dipanggil oleh blok pesan overwrite_buffer ini untuk menentukan apakah harus menerima pesan yang ditawarkan atau tidak.

sebarkan_pesan

Secara asinkron meneruskan pesan dari ISource blok ke blok olahpesan ini overwrite_buffer . Ini dipanggil oleh metode propagate ketika dipanggil oleh blok sumber.

virtual message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

Parameter

_PMessage
Penunjuk ke message objek.

_PSource
Penunjuk ke blok sumber yang menawarkan pesan.

Tampilkan Nilai

Tanda message_status tentang keputusan target terhadap pesan.

menyebarkan_ke_semua_target

Tempatkan message _PMessage di blok olahpesan ini overwrite_buffer dan tawarkan ke semua target yang ditautkan.

virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);

Parameter

_PMessage
Penunjuk ke objek message yang kepemilikannya kini dimiliki oleh overwrite_buffer.

Keterangan

Metode ini menimpa pesan saat ini dalam overwrite_buffer dengan pesan yang baru diterima _PMessage.

kirim_pesan

Secara sinkron meneruskan pesan dari ISource blok ke blok olahpesan ini overwrite_buffer . Ini dipanggil oleh metode send ketika dipanggil oleh blok sumber.

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

Parameter

_PMessage
Penunjuk ke message objek.

_PSource
Penunjuk ke blok sumber yang menawarkan pesan.

Tampilkan Nilai

Tanda message_status tentang keputusan target terhadap pesan.

mendukung_sumber_anonim

Mengganti metode supports_anonymous_source untuk menunjukkan bahwa blok ini dapat menerima pesan yang ditawarkan oleh sumber yang tidak ditautkan.

virtual bool supports_anonymous_source();

Tampilkan Nilai

true karena blok tidak menunda pesan yang ditawarkan.

pesan_rilis

Menghapus reservasi pesan yang sebelumnya.

virtual void release_message(runtime_object_identity _MsgId);

Parameter

_MsgId
runtime_object_identity dari objek message yang dilepaskan.

pesan_cadangan

Mengamankan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini overwrite_buffer.

virtual bool reserve_message(runtime_object_identity _MsgId);

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

Melanjutkan proses penyebaran setelah reservasi dilepaskan.

virtual void resume_propagation();

nilai

Mendapatkan referensi ke payload saat ini dari pesan yang disimpan di blok olahpesan overwrite_buffer.

T value();

Tampilkan Nilai

Payload pesan yang saat ini disimpan.

Keterangan

Nilai yang disimpan dalam overwrite_buffer dapat berubah segera setelah metode ini selesai. Metode ini akan menunggu hingga pesan tiba jika tidak ada pesan yang saat ini disimpan di overwrite_buffer.

Lihat juga

Namespace layanan konkurensi
Kelas unbounded_buffer
Kelas single_assignment