Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Mesajlaşma single_assignment bloğu çok hedefli, çok kaynaklı, bir kez yazılan propagator_block depolayabilen sıralı message 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
Mesajın arabellek tarafından depolanan ve dağıtılan yük türü.
Üyeler
Ortak Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
| single_assignment | Aşırı yüklü Bir single_assignment mesajlaşma bloğu oluşturur. |
| ~single_assignment Yıkıcı Fonksiyon | Mesajlaşma bloğunu single_assignment yok eder. |
Genel Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
| has_value | Bu single_assignment mesajlaşma bloğunun henüz bir değerle başlatılmış olup olmadığını kontrol eder. |
| value | Mesajlaşma bloğunda şu anda depolanan mesajın geçerli yüküne single_assignment bir başvuru alır. |
Korumalı Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
| 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 single_assignment tarafından sunulan ve hedef tarafından ayrılmış bir mesajı tüketir, ardından mesajın bir kopyasını sunucuya döndürür. |
| link_hedef_bildirim | Bu single_assignment mesajlaşma bloğuna yeni bir hedefin bağlandığını bildiren geri arama. |
| propagate_message |
ISource bloktan gelen bir mesajı zaman uyumsuz olarak bu single_assignment mesajlaşma bloğuna geçirir.
propagate yöntemi, bir kaynak bloğu tarafından çağrıldığında çalıştırılır. |
| herhangi_bir_hedefe_yay |
message _PMessage öğesini bu single_assignment mesajlaşma bloğuna yerleştirir ve tüm bağlantılı hedeflere sunar. |
| yayın_mesajı | Önceki mesaj rezervasyonunu kaldırır. (Geçersiz kılmalar source_block::release_message.) |
| rezerv_mesajı | Daha önce bu single_assignment mesajlaşma bloğu tarafından sunulan bir iletiyi ayırır. (Geçersiz kılar source_block::reserve_message.) |
| resume_propagation | Rezervasyon serbest bırakıldıktan sonra yayılım yeniden başlar. (Geçersiz kılmalar source_block::resume_propagation.) |
| send_message | Bir bloktan iletiyi senkronize olarak bu single_assignment mesajlaşma bloğuna geçirir.
send yöntemi, bir kaynak bloğu tarafından çağrıldığında çalıştırılır. |
Açıklamalar
Mesajlaşma single_assignment birimi, mesajının kopyalarını her hedefe yayımlar.
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
kabul_mesaji
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
Sunulan message nesnesinin runtime_object_identity.
Dönüş Değeri
Çağıranın artık sahip olduğu message nesnesine ait bir işaretçi.
Açıklamalar
Mesajlaşma single_assignment bloğu, o anda tutulan iletinin sahipliğini aktarmak yerine iletinin kopyalarını hedeflerine döndürür.
mesaj tüket
Daha önce single_assignment tarafından sunulan ve hedef tarafından ayrılmış bir mesajı tüketir, ardından mesajın bir kopyasını sunucuya döndürür.
virtual message<T>* consume_message(runtime_object_identity _MsgId);
Parametreler
_MsgId
runtime_object_identity Tüketilen nesnenin message sayısı.
Dönüş Değeri
Çağıranın artık sahip olduğu message nesnesine ait bir işaretçi.
Açıklamalar
Bu, accept'ye benzer, ancak her zaman reserve çağrısından önce gelir.
has_value
Bu single_assignment mesajlaşma bloğunun henüz bir değerle başlatılmış olup olmadığını kontrol eder.
bool has_value() const;
Dönüş Değeri
true bloğu bir değer aldıysa, false aksi takdirde.
bağlantı_hedef_bildirimi
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ğlantı yapılan hedefe işaret eden bir işaretçi.
propagate_message
ISource bloktan gelen bir mesajı zaman uyumsuz olarak bu single_assignment mesajlaşma bloğuna geçirir.
propagate yöntemi, bir kaynak bloğu tarafından çağrıldığında çalıştı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.
Dönüş Değeri
Hedefin iletiyle ne yapmaya karar verdiğine dair bir message_status göstergesi.
herhangi_bir_hedefe_yaymak
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 message mesajlaşma bloğunun sahipliğini aldığı bir single_assignment işaretçi.
sürüm_mesajı
Önceki mesaj rezervasyonunu kaldırır.
virtual void release_message(runtime_object_identity _MsgId);
Parametreler
_MsgId
Bırakılan message nesnesinin runtime_object_identity serbest.
rezerve_mesajı
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.
Dönüş Değeri
true ileti başarıyla rezerve edildiyse, false aksi takdirde.
Açıklamalar
reserve çağrıldıktan sonra, eğer true döndürülürse, iletinin sahipliğini almak veya release iletmek için ya consume ya da release çağrılmalıdır.
resume_propagation
Rezervasyon serbest bırakıldıktan sonra yayılım yeniden başlar.
virtual void resume_propagation();
mesaj_gönder
Bir bloktan iletiyi senkronize olarak bu single_assignment mesajlaşma bloğuna geçirir.
send yöntemi, bir kaynak bloğu tarafından çağrıldığında çalıştı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.
Dönüş Değeri
Hedefin iletiyle ne yapmaya karar verdiğine dair bir message_status göstergesi.
tekli_atama
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 nesnesi, single_assignment ileti bloğu için yayma görevinin zamanlandığı yerdir.
_PScheduleGroup
ScheduleGroup nesnesi, single_assignment ileti bloğu için yayma görevinin zamanlandığı yerdir.
Scheduler kullanılan nesne zamanlama grubuyla belirtilir.
Açıklamalar
_PScheduler veya _PScheduleGroup parametrelerini belirtmezseniz çalışma zamanı varsayılan zamanlayıcıyı kullanır.
Tür filter_method, imzalı bool (T const &) olan bir functor olup, bu single_assignment mesajlaşma bloğu tarafından sunulan bir mesajı kabul edip etmemesi gerektiğini belirlemek için çağrılır.
~single_assignment
Mesajlaşma bloğunu single_assignment yok eder.
~single_assignment();
değer
Mesajlaşma bloğunda şu anda depolanan mesajın geçerli yüküne single_assignment bir başvuru alır.
T const& value();
Dönüş 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ı