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
tupleGiriş 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 Tbir 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

ISource

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 acceptbenzerdir, 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.

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ı reserveyaptıktan sonra, başarılı olursa, sırasıyla iletiyi almak veya release ele geçirmemek için ya da consume aramanız gerekir.

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.

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.

Ayrıca bkz.

Eşzamanlılık Ad Alanı
join Sınıfı
single_assignment Sınıfı