single_assignment Sınıfı
Mesajlaşma single_assignment
bloğu çok hedefli, çok kaynaklı, tek bir yazma bir kez message
depolayabilen sıralı propagator_block
bir blok.
Sözdizimi
template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Parametreler
T
Arabellek tarafından depolanan ve yayılan iletinin yük türü.
Üyeler
Ortak Oluşturucular
Ad | Tanım |
---|---|
Single_assignment | Aşırı yüklendi. Bir single_assignment mesajlaşma bloğu oluşturur. |
~single_assignment Yıkıcı | Mesajlaşma bloğunu single_assignment yok eder. |
Genel Yöntemler
Ad | Tanım |
---|---|
has_value | Bu single_assignment mesajlaşma bloğunun henüz bir değerle başlatılıp başlatılmadığını denetler. |
value | İleti bloğunda depolanan iletinin geçerli yüküne single_assignment bir başvuru alır. |
Korumalı Yöntemler
Ad | Tanım |
---|---|
accept_message | Bu single_assignment mesajlaşma bloğu tarafından sunulan bir iletiyi kabul eder ve arayana iletinin bir kopyasını döndürür. |
consume_message | Daha önce tarafından sunulan single_assignment ve hedef tarafından ayrılmış bir ileti kullanır ve iletinin bir kopyasını arayana döndürür. |
link_target_notification | Bu single_assignment mesajlaşma bloğuna yeni bir hedefin bağlandığını bildiren geri arama. |
propagate_message | Bir bloktan ISource gelen iletiyi zaman uyumsuz olarak bu single_assignment mesajlaşma bloğuna geçirir. Bir kaynak bloğu tarafından çağrıldığında yöntemi tarafından propagate çağrılır. |
propagate_to_any_targets | message _PMessage öğesini bu single_assignment mesajlaşma bloğuna yerleştirir ve tüm bağlantılı hedeflere sunar. |
release_message | Önceki ileti rezervasyonlarını yayınlar. (Geçersiz kılmalar source_block::release_message.) |
reserve_message | Daha önce bu single_assignment mesajlaşma bloğu tarafından sunulan bir iletiyi ayırır. (Geçersiz kılmalar source_block::reserve_message.) |
resume_propagation | Rezervasyon yayımlandıktan sonra yayılmaya devam eder. (Geçersiz kılmalar source_block::resume_propagation.) |
send_message | Bir bloktan gelen iletiyi zaman uyumlu bir ISource şekilde bu single_assignment mesajlaşma bloğuna geçirir. Bir kaynak bloğu tarafından çağrıldığında yöntemi tarafından send çağrılır. |
Açıklamalar
Mesajlaşma single_assignment
bloğu, iletisinin kopyalarını her hedefe yayılır.
Daha fazla bilgi için bkz . Zaman Uyumsuz İleti Blokları.
Devralma Hiyerarşisi
single_assignment
Gereksinimler
Üst bilgi: agents.h
Ad alanı: eşzamanlılık
accept_message
Bu single_assignment
mesajlaşma bloğu tarafından sunulan bir iletiyi kabul eder ve arayana iletinin bir kopyasını döndürür.
virtual message<T>* accept_message(runtime_object_identity _MsgId);
Parametreler
_MsgId
runtime_object_identity
Sunulan message
nesnenin öğesi.
İade Değeri
Çağıranın message
artık sahip olduğu nesnenin işaretçisi.
Açıklamalar
Mesajlaşma single_assignment
bloğu, o anda tutulan iletinin sahipliğini aktarmak yerine iletinin kopyalarını hedeflerine döndürür.
consume_message
Daha önce tarafından sunulan single_assignment
ve hedef tarafından ayrılmış bir ileti kullanır ve iletinin bir kopyasını arayana döndürür.
virtual message<T>* consume_message(runtime_object_identity _MsgId);
Parametreler
_MsgId
runtime_object_identity
Tüketilen nesnenin message
sayısı.
İade Değeri
Çağıranın message
artık sahip olduğu nesnenin işaretçisi.
Açıklamalar
benzeridir accept
, ancak her zaman için bir çağrısının reserve
önündedir.
has_value
Bu single_assignment
mesajlaşma bloğunun henüz bir değerle başlatılıp başlatılmadığını denetler.
bool has_value() const;
İade Değeri
true
bloğu bir değer aldıysa, false
aksi takdirde.
link_target_notification
Bu single_assignment
mesajlaşma bloğuna yeni bir hedefin bağlandığını bildiren geri arama.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Parametreler
_PTarget
Yeni bağlanan hedefe işaret eden bir işaretçi.
propagate_message
Bir bloktan ISource
gelen iletiyi zaman uyumsuz olarak bu single_assignment
mesajlaşma bloğuna geçirir. Bir kaynak bloğu tarafından çağrıldığında yöntemi tarafından propagate
çağrılır.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Parametreler
_PMessage
Nesnenin işaretçisi message
.
_PSource
İletiyi sunan kaynak bloğun işaretçisi.
İade Değeri
Hedefin iletiyle ne yapmaya karar verdiklerine ilişkin message_status bir gösterge.
propagate_to_any_targets
message
_PMessage
öğesini bu single_assignment
mesajlaşma bloğuna yerleştirir ve tüm bağlantılı hedeflere sunar.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Parametreler
_PMessage
Bu single_assignment
mesajlaşma bloğunun sahipliğini aldığı bir message
işaretçi.
release_message
Önceki ileti rezervasyonlarını yayınlar.
virtual void release_message(runtime_object_identity _MsgId);
Parametreler
_MsgId
Serbest runtime_object_identity
bırakılan nesnenin message
.
reserve_message
Daha önce bu single_assignment
mesajlaşma bloğu tarafından sunulan bir iletiyi ayırır.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parametreler
_MsgId
runtime_object_identity
Ayrılan nesnenin message
öğesi.
İade Değeri
true
ileti başarıyla ayrılmışsa, false
aksi takdirde.
Açıklamalar
çağrıldıktan sonrareserve
, döndürüyorsatrue
consume
, iletinin sahipliğini almak veya release
yayınlamak için çağrılmalıdır.
resume_propagation
Rezervasyon yayımlandıktan sonra yayılmaya devam eder.
virtual void resume_propagation();
send_message
Bir bloktan gelen iletiyi zaman uyumlu bir ISource
şekilde bu single_assignment
mesajlaşma bloğuna geçirir. Bir kaynak bloğu tarafından çağrıldığında yöntemi tarafından send
çağrılır.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Parametreler
_PMessage
Nesnenin işaretçisi message
.
_PSource
İletiyi sunan kaynak bloğun işaretçisi.
İade Değeri
Hedefin iletiyle ne yapmaya karar verdiklerine ilişkin message_status bir gösterge.
Single_assignment
Bir single_assignment
mesajlaşma bloğu oluşturur.
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);
Parametreler
_Filtre
Sunulan iletilerin kabul edilip edilmeyeceğini belirleyen bir filtre işlevi.
_PScheduler
Scheduler
İleti bloğu için yayma görevinin single_assignment
zamanlandığı nesne.
_PScheduleGroup
ScheduleGroup
İleti bloğu için yayma görevinin single_assignment
zamanlandığı nesne. Scheduler
Kullanılan nesne zamanlama grubu tarafından örtülür.
Açıklamalar
veya _PScheduleGroup
parametrelerini belirtmezseniz çalışma zamanı varsayılan zamanlayıcıyı _PScheduler
kullanır.
Türüfilter_method
, sunulan bir iletiyi kabul edip etmemesi gerektiğini belirlemek için bu single_assignment
mesajlaşma bloğu tarafından çağrılan imzalı bool (T const &)
bir functor'dır.
~Single_assignment
Mesajlaşma bloğunu single_assignment
yok eder.
~single_assignment();
value
İleti bloğunda depolanan iletinin geçerli yüküne single_assignment
bir başvuru alır.
T const& value();
İade Değeri
Depolanan iletinin yükü.
Açıklamalar
Bu yöntem, ileti bloğunda şu anda hiçbir ileti depolanmadıysa ileti gelene single_assignment
kadar bekler.
Ayrıca bkz.
Eşzamanlılık Ad Alanı
overwrite_buffer Sınıfı
unbounded_buffer Sınıfı
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin