seçenek Sınıfı
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
tuple
Giriş kaynaklarının yüklerini temsil eden tabanlı bir tür.
Üyeler
Genel Tür Tanımları
Veri Akışı Adı | Açıklama |
---|---|
type |
için T bir tür diğer adı. |
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
seçim | Aşırı yüklendi. Bir choice mesajlaşma bloğu oluşturur. |
~choice Yıkıcı | Mesajlaşma bloğunu choice yok eder. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
almak | Bu choice blok tarafından sunulan bir iletiyi kabul eder ve sahipliğini arayana aktarır. |
acquire_ref | Silme işlemini önlemek için bu choice mesajlaşma bloğunda bir başvuru sayısı alır. |
tüketmek | Daha önce bu choice mesajlaşma bloğu tarafından sunulan ve hedef tarafından başarıyla ayrılmış bir iletiyi kullanır ve sahipliği arayana aktarır. |
has_value | Bu choice mesajlaşma bloğunun henüz bir değerle başlatılıp başlatılmadığını denetler. |
Dizin | mesajlaşma bloğu tarafından seçilen öğeyi temsil eden dizinine tuple choice bir dizin döndürür. |
link_target | Bir hedef bloğu bu choice mesajlaşma bloğuna bağlar. |
serbest bırakma | Önceki başarılı bir ileti ayırmayı yayınlar. |
release_ref | Bu choice mesajlaşma bloğunda bir başvuru sayısı yayınlar. |
ayırmak | 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 | Dizini mesajlaşma bloğu tarafından choice seçilen 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
runtime_object_identity
Sunulan message
nesnenin öğesi.
_PTarget
yöntemini çağıran hedef bloğun işaretçisi accept
.
Dönüş Değeri
Çağıranın artık sahip olduğu iletinin işaretçisi.
acquire_ref
Silme işlemini önlemek için bu choice
mesajlaşma bloğunda bir başvuru sayısı alır.
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, yöntemi sırasında bu kaynağa bağlı olan bir ITarget
nesne tarafından çağrılır link_target
.
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 kaynaklardan biri.
_PScheduler
Scheduler
İleti bloğu için yayma görevinin choice
zamanlandığı nesne.
_PScheduleGroup
ScheduleGroup
İleti bloğu için yayma görevinin choice
zamanlandığı nesne. Scheduler
Kullanılan nesne zamanlama grubu tarafından örtülür.
_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
veya _PScheduleGroup
parametrelerini belirtmezseniz çalışma zamanı varsayılan zamanlayıcıyı _PScheduler
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();
consume
Daha önce bu choice
mesajlaşma bloğu tarafından sunulan ve hedef tarafından başarıyla ayrılmış bir iletiyi kullanır ve sahipliği 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
yöntemini çağıran hedef bloğun işaretçisi consume
.
Dönüş Değeri
Çağıranın message
artık sahip olduğu nesnenin işaretçisi.
Açıklamalar
consume
yöntemi ile accept
benzerdir, ancak her zaman döndürülen true
öğesine reserve
yapılan bir çağrıdan önce olmalıdır.
has_value
Bu choice
mesajlaşma bloğunun henüz bir değerle başlatılıp başlatılmadığını denetler.
bool has_value() const;
Dönüş Değeri
true
bloğu bir değer aldıysa, false
aksi takdirde.
dizin
mesajlaşma bloğu tarafından seçilen öğeyi temsil eden dizinine tuple
choice
bir dizin döndürür.
size_t index();
Dönüş Değeri
İleti dizini.
Açıklamalar
İleti yükü yöntemi kullanılarak get
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 choice
mesajlaşma bloğuna bağlanmak için bir ITarget
bloğun işaretçisi.
serbest bırakma
Önceki başarılı bir ileti ayırmayı yayınlar.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parametreler
_MsgId
Serbest runtime_object_identity
bırakılan nesnenin message
.
_PTarget
yöntemini çağıran hedef bloğun işaretçisi release
.
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
yöntemini çağıran hedef bloğun işaretçisi reserve
.
Dönüş Değeri
true
ileti başarıyla ayrılmışsa, false
aksi takdirde. Rezervasyonlar, ileti zaten ayrılmış veya başka bir hedef tarafından kabul edilmiş, kaynak rezervasyonları reddedebilir vb. gibi birçok nedenden dolayı başarısız olabilir.
Açıklamalar
çağrısı reserve
yaptıktan sonra, başarılı olursa, sırasıyla iletiyi almak veya release
ele geçirmemek için ya da consume
aramanız gerekir.
unlink_target
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ğunun 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
Dizini mesajlaşma bloğu tarafından choice
seçilen 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.