Gabung Kelas

join Blok olahpesan adalah target tunggal, multi-sumber, yang diurutkan propagator_block yang menggabungkan bersama-sama pesan jenis T dari masing-masing sumbernya.

Sintaks

template<class T,
    join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
    multi_link_registry<ISource<T>>>;

Parameter

T
Jenis muatan pesan yang digabungkan dan disebarluaskan oleh blok.

_Jtype
Jenis blok join ini adalah apakah greedy atau non_greedy

Anggota

Konstruktor Publik

Nama Deskripsi
join Kelebihan beban. Membuat join blok pesan.
~join Destructor Menghancurkan blok join.

Metode yang Dilindungi

Nama Deskripsi
accept_message Menerima pesan yang ditawarkan oleh blok olahpesan ini join, dengan mentransfer kepemilikannya kepada pemanggil.
consume_message Mengkonsumsi pesan yang sebelumnya ditawarkan oleh blok olahpesan join dan dipesan oleh target, dengan mentransfer kepemilikan ke pemanggil.
notifikasi_target_tautan Sebuah callback yang memberi tahu bahwa target baru telah ditautkan ke blok pesan ini join.
propagate_message Secara asinkron meneruskan pesan dari ISource blok ke blok olahpesan ini join . Ini dipanggil oleh metode propagate ketika dipanggil oleh blok sumber.
sebarkan_ke_semua_tujuan Membuat pesan output yang berisi pesan input dari setiap sumber ketika semuanya menyebarkan pesan. Mengirim pesan output ini ke setiap targetnya.
release_message Menghapus reservasi pesan yang sebelumnya. (Mengganti source_block::release_message.)
reserve_message Mengamankan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini join. (Mengganti source_block::reserve_message.)
resume_propagation Melanjutkan proses penyebaran setelah reservasi dilepaskan. (Mengambil alih source_block::resume_propagation.)

Keterangan

Untuk informasi selengkapnya, lihat Blok Pesan Asinkron.

Hierarki Pewarisan

ISource

ITarget

source_block

propagator_block

join

Persyaratan

Header: agents.h

Namespace: konkurensi

terima_pesan

Menerima pesan yang ditawarkan oleh blok olahpesan ini join, dengan mentransfer kepemilikannya kepada pemanggil.

virtual message<_OutputType>* 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.

konsumsi_pesan

Mengkonsumsi pesan yang sebelumnya ditawarkan oleh blok olahpesan join dan dipesan oleh target, dengan mentransfer kepemilikan ke pemanggil.

virtual message<_OutputType>* 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.

gabung

Membuat join blok pesan.

join(
    size_t _NumInputs);

join(
    size_t _NumInputs,
    filter_method const& _Filter);

join(
    Scheduler& _PScheduler,
    size_t _NumInputs);

join(
    Scheduler& _PScheduler,
    size_t _NumInputs,
    filter_method const& _Filter);

join(
    ScheduleGroup& _PScheduleGroup,
    size_t _NumInputs);

join(
    ScheduleGroup& _PScheduleGroup,
    size_t _NumInputs,
    filter_method const& _Filter);

Parameter

_NumInputs
Jumlah input blok ini join akan diizinkan.

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

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

_PScheduleGroup
Objek ScheduleGroup di mana tugas propagasi untuk blok olahpesan join 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 join ini untuk menentukan apakah harus menerima pesan yang ditawarkan atau tidak.

~gabung

Menghancurkan blok join.

~join();

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

virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);

sebarkan_pesan

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

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

Membuat pesan output yang berisi pesan input dari setiap sumber ketika semuanya menyebarkan pesan. Mengirim pesan output ini ke setiap targetnya.

void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);

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 join.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Objek message yang ditawarkan dari runtime_object_identity.

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

Lihat juga

Namespace layanan konkurensi
kelas pilihan
Kelas multitype_join