Kelas single_assignment

single_assignment Blok olahpesan adalah multi-target, multi-sumber, diurutkan propagator_block mampu menyimpan satu, tulis-sekali message.

Sintaks

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

Parameter

T
Jenis payload pesan yang disimpan dan disebarkan oleh buffer.

Anggota

Konstruktor Publik

Nama Deskripsi
single_assignment Kelebihan beban. Membuat single_assignment blok olahpesan.
~single_assignment Destructor single_assignment Menghancurkan blok olahpesan.

Metode Publik

Nama Deskripsi
has_value Memeriksa apakah blok olahpesan ini single_assignment telah diinisialisasi dengan nilai.
value Mendapatkan referensi ke payload pesan saat ini yang disimpan di single_assignment blok olahpesan.

Metode yang Dilindungi

Nama Deskripsi
accept_message Menerima pesan yang ditawarkan oleh blok olahpesan ini single_assignment , mengembalikan salinan pesan ke pemanggil.
consume_message Mengonsumsi pesan yang sebelumnya ditawarkan oleh single_assignment dan dicadangkan oleh target, mengembalikan salinan pesan ke pemanggil.
link_target_notification Panggilan balik yang memberi tahu bahwa target baru telah ditautkan ke blok olahpesan ini single_assignment .
propagate_message Secara asinkron meneruskan pesan dari ISource blok ke blok olahpesan ini single_assignment . Ini dipanggil oleh propagate metode , ketika dipanggil oleh blok sumber.
propagate_to_any_targets Tempatkan message _PMessage di blok olahpesan ini single_assignment dan tawarkan ke semua target yang ditautkan.
release_message Merilis reservasi pesan sebelumnya. (Mengambil alih source_block::release_message.)
reserve_message Memesan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini single_assignment . (Mengambil alih source_block::reserve_message.)
resume_propagation Melanjutkan penyebaran setelah reservasi dirilis. (Mengambil alih source_block::resume_propagation.)
send_message Secara sinkron meneruskan pesan dari ISource blok ke blok olahpesan ini single_assignment . Ini dipanggil oleh send metode , ketika dipanggil oleh blok sumber.

Keterangan

single_assignment Blok olahpesan menyebarluaskan salinan pesannya ke setiap target.

Untuk informasi selengkapnya, lihat Blok Pesan Asinkron.

Hierarki Warisan

ISource

ITarget

source_block

propagator_block

single_assignment

Persyaratan

Header: agents.h

Namespace: konkurensi

accept_message

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

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

Parameter

_MsgId
Dari runtime_object_identity objek yang ditawarkan message .

Tampilkan Nilai

Penunjuk ke message objek yang sekarang dimiliki pemanggil.

Keterangan

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

consume_message

Mengonsumsi pesan yang sebelumnya ditawarkan oleh single_assignment 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 message objek yang sekarang dimiliki pemanggil.

Keterangan

Mirip acceptdengan , tetapi selalu didahului oleh panggilan ke reserve.

has_value

Memeriksa apakah blok olahpesan ini single_assignment telah diinisialisasi dengan nilai.

bool has_value() const;

Tampilkan Nilai

true jika blok telah menerima nilai, false jika tidak.

Panggilan balik yang memberi tahu bahwa target baru telah ditautkan ke blok olahpesan ini single_assignment .

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

Parameter

_PTarget
Penunjuk ke target yang baru ditautkan.

propagate_message

Secara asinkron meneruskan pesan dari ISource blok ke blok olahpesan ini single_assignment . Ini dipanggil oleh propagate metode , 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

Indikasi message_status tentang apa yang diputuskan target dengan pesan.

propagate_to_any_targets

Tempatkan message_PMessage di blok olahpesan ini single_assignment dan tawarkan ke semua target yang ditautkan.

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

Parameter

_PMessage
Penunjuk ke message blok olahpesan ini single_assignment telah mengambil kepemilikan.

release_message

Merilis reservasi pesan sebelumnya.

virtual void release_message(runtime_object_identity _MsgId);

Parameter

_MsgId
Objek runtime_object_identity yang message dilepaskan.

reserve_message

Memesan pesan yang sebelumnya ditawarkan oleh blok olahpesan ini single_assignment .

virtual bool reserve_message(runtime_object_identity _MsgId);

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

Melanjutkan penyebaran setelah reservasi dirilis.

virtual void resume_propagation();

send_message

Secara sinkron meneruskan pesan dari ISource blok ke blok olahpesan ini single_assignment . Ini dipanggil oleh send metode , 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

Indikasi message_status tentang apa yang diputuskan target dengan pesan.

single_assignment

Membuat single_assignment blok olahpesan.

single_assignment();

single_assignment(
    filter_method const& _Filter);

single_assignment(
    Scheduler& _PScheduler);

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

single_assignment(
    ScheduleGroup& _PScheduleGroup);

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

Parameter

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

_PScheduler
Objek Scheduler tempat tugas penyebaran untuk single_assignment blok olahpesan dijadwalkan.

_PScheduleGroup
Objek ScheduleGroup tempat tugas penyebaran untuk single_assignment blok olahpesan dijadwalkan. Objek Scheduler yang digunakan tersirat oleh grup jadwal.

Keterangan

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

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

~single_assignment

single_assignment Menghancurkan blok olahpesan.

~single_assignment();

value

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

T const& value();

Tampilkan Nilai

Payload pesan tersimpan.

Keterangan

Metode ini akan menunggu hingga pesan tiba jika tidak ada pesan yang saat ini disimpan di single_assignment blok olahpesan.

Baca juga

Namespace layanan konkurensi
Kelas overwrite_buffer
Kelas unbounded_buffer