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.
choice Mesajlaşma bloğu, bir dizi kaynakla denetim akışı etkileşimini temsil eden çok kaynaklı, tek hedefli bir bloktır. Seçim bloğu, birden çok kaynaktan herhangi birinin ileti üretmesini bekler ve iletiyi oluşturan kaynağın dizinini yayacaktır.
Sözdizimi
template<
class T
>
class choice: public ISource<size_t>;
Parametreler
T
tupleGiriş kaynaklarının yüklerini temsil eden tabanlı bir tür.
Üyeler
Genel Tür Tanımları
| Veri Akışı Adı | Açıklama |
|---|---|
type |
T için bir tür takma ad. |
Ortak Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
| seçim | Aşırı yüklü Bir choice mesajlaşma bloğu oluşturur. |
| ~choice Destructor | Mesajlaşma bloğunu choice yok eder. |
Genel Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
| kabul etmek | Bu choice blok tarafından sunulan bir iletiyi kabul eder ve sahipliğini arayana aktarır. |
| acquire_ref | Silinmeyi önlemek için bu choice mesajlaşma bloğunda bir referans sayısı edinir. |
| tüketmek | Bu choice mesajlaşma bloğu tarafından daha önce sunulan ve hedef tarafından başarıyla ayrılan bir iletiyi tüketir ve sahipliğini arayana aktarır. |
| has_value | Bu choice mesajlaşma bloğunun henüz bir değerle başlatılmış olup olmadığını kontrol eder. |
| Dizin |
choice mesajlaşma bloğu tarafından seçilen ve tuple ile temsil edilen öğenin dizinini döndürür. |
| link_target | Bir hedef bloğu bu choice mesajlaşma bloğuna bağlar. |
| yayın | Önceki başarılı bir mesaj rezervasyonunu serbest bırakır. |
| release_ref | Bu choice mesajlaşma bloğunda bir başvuru sayısı yayınlar. |
| rezerve etmek | Daha önce bu choice mesajlaşma bloğu tarafından sunulan bir iletiyi ayırır. |
| unlink_target | Bir hedef bloğun bu choice mesajlaşma bloğuyla bağlantısını kaldırır. |
| unlink_targets | Bu choice mesajlaşma bloğundaki tüm hedeflerin bağlantısını kaldırır. (Geçersiz Kılmalar ISource::unlink_targets.) |
| value |
choice mesajlaşma bloğu tarafından seçilen geçerli indisteki iletiyi alır. |
Açıklamalar
Seçim bloğu, gelen iletilerden yalnızca birinin tüketilmesini sağlar.
Daha fazla bilgi için bkz. Zaman Uyumsuz İleti Blokları.
Devralma Hiyerarşisi
choice
Gereksinimler
Üst bilgi: agents.h
Ad alanı: eşzamanlılık
kabul et
Bu choice blok tarafından sunulan bir iletiyi kabul eder ve sahipliğini arayana aktarır.
virtual message<size_t>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_MsgId
Sunulan message nesnesinin runtime_object_identity.
_PTarget
hedef bloğun accept yöntemini çağıran bir işaretçisi.
Dönüş Değeri
Çağıranın artık sahip olduğu bir mesajın işaretçisi.
acquire_ref
Silinmeyi önlemek için bu choice mesajlaşma bloğunda bir referans sayısı edinir.
virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_PTarget
Bu yöntemi çağıran hedef bloğun işaretçisi.
Açıklamalar
Bu yöntem, link_target yöntemi sırasında bu kaynağa bağlı olan bir ITarget nesne tarafından çağrılır.
seçenek
Bir choice mesajlaşma bloğu oluşturur.
explicit choice(
T _Tuple);
choice(
Scheduler& _PScheduler,
T _Tuple);
choice(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
choice(
choice&& _Choice);
Parametreler
_Tuple
tuple Seçim için kaynakların bütünü.
_PScheduler
Scheduler nesnesi içinde, choice ileti bloğu için iletim görevi zamanlanır.
_PScheduleGroup
ScheduleGroup nesnesi, choice ileti bloğu için yayma görevinin zamanlandığı yerdir.
Scheduler kullanılan nesne zamanlama grubuyla belirtilir.
_Seçim
Kopyalanacak choice bir mesajlaşma bloğu. Özgün nesnenin yalnız bırakılmış olduğunu ve bunu bir taşıma oluşturucu haline getirdiğini unutmayın.
Açıklamalar
_PScheduler veya _PScheduleGroup parametrelerini belirtmezseniz çalışma zamanı varsayılan zamanlayıcıyı kullanır.
Taşıma yapısı bir kilit altında yapılmaz, yani taşıma sırasında uçuşta hafif görevler olmadığından emin olmak kullanıcıya aittir. Aksi takdirde, çok sayıda yarış meydana gelebilir ve bu da özel durumlara veya tutarsız duruma neden olabilir.
~seçim
Mesajlaşma bloğunu choice yok eder.
~choice();
tüketmek
Bu choice mesajlaşma bloğu tarafından daha önce sunulan ve hedef tarafından başarıyla ayrılan bir iletiyi tüketir ve sahipliğini arayana aktarır.
virtual message<size_t>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_MsgId
runtime_object_identity Ayrılmış message nesnenin öğesi.
_PTarget
hedef bloğun consume yöntemini çağıran bir işaretçisi.
Dönüş Değeri
Çağıranın artık sahip olduğu message nesnesine ait bir işaretçi.
Açıklamalar
consume yöntemi accept yöntemine benzer, ancak her zaman true döndüren reserve çağrısından sonra gelmelidir.
has_value
Bu choice 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.
indeks
choice mesajlaşma bloğu tarafından seçilen ve tuple ile temsil edilen öğenin dizinini döndürür.
size_t index();
Dönüş Değeri
Mesaj dizini.
Açıklamalar
Yük mesajı get yöntemi kullanılarak ayıklanabilir.
link_target
Bir hedef bloğu bu choice mesajlaşma bloğuna bağlar.
virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_PTarget
Bu ITarget mesajlaşma bloğuna bağlanmak için bir choice bloğa işaret eden bir gösterici.
serbest bırakma
Önceki başarılı bir mesaj rezervasyonunu serbest bırakır.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_MsgId
Bırakılan message nesnesinin runtime_object_identity serbest.
_PTarget
hedef bloğun release yöntemini çağıran bir işaretçisi.
release_ref
Bu choice mesajlaşma bloğunda bir başvuru sayısı yayınlar.
virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_PTarget
Bu yöntemi çağıran hedef bloğun işaretçisi.
Açıklamalar
Bu yöntem, bu kaynaktan bağlantısı kaldırılan bir ITarget nesne tarafından çağrılır. Kaynak bloğunun hedef blok için ayrılmış tüm kaynakları serbest bırakmasına izin verilir.
ayırmak
Daha önce bu choice mesajlaşma bloğu tarafından sunulan bir iletiyi ayırır.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_MsgId
runtime_object_identity Ayrılan nesnenin message öğesi.
_PTarget
hedef bloğun reserve yöntemini çağıran bir işaretçisi.
Dönüş Değeri
true ileti başarıyla rezerve edildiyse, false aksi takdirde. Rezervasyonlar birçok nedenden dolayı başarısız olabilir. Bu nedenler arasında: mesajın zaten ayrılmış olması veya başka bir hedef tarafından kabul edilmesi, kaynağın rezervasyonları reddedebilmesi gibi durumlar yer alır.
Açıklamalar
reserve’yı çağırdıktan sonra, başarılı olursa, mesajın sahipliğini almak için consume veya vazgeçmek için release çağrısını yapmanız gerekir.
hedefi_bağlantıdan_ayır
Bir hedef bloğun bu choice mesajlaşma bloğuyla bağlantısını kaldırır.
virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_PTarget
Bu choice mesajlaşma bloğundan bağlantısını kaldırmak için bir ITarget bloğun işaretçisi.
unlink_targets
Bu choice mesajlaşma bloğundaki tüm hedeflerin bağlantısını kaldırır.
virtual void unlink_targets();
Açıklamalar
İç single_assignment bloğun yıkıcısı düzgün bir şekilde bağlantısını keseceği için bu yöntemin yıkıcıdan çağrılması gerekmez.
değer
choice mesajlaşma bloğu tarafından seçilen geçerli indisteki iletiyi alır.
template <
typename _Payload_type
>
_Payload_type const& value();
Parametreler
_Payload_type
İleti yükünün türü.
Dönüş Değeri
İletinin yükü.
Açıklamalar
Mesajlaşma choice bloğu farklı yük türlerine sahip girişler alabildiği için, alma noktasında yükün türünü belirtmeniz gerekir. Türü yöntemin sonucuna index göre belirleyebilirsiniz.