Sınıf Seçenek

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

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

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.

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.

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.

Ayrıca bkz.

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