source_block Sınıfı

source_block sınıfı, yalnızca kaynak blokları için soyut bir temel sınıftır. sınıfı, temel bağlantı yönetimi işlevlerinin yanı sıra yaygın hata denetimleri de sağlar.

Sözdizimi

template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;

Parametreler

_TargetLinkRegistry
Hedef bağlantıları tutmak için kullanılacak bağlantı kayıt defteri.

_MessageProcessorType
İleti işleme için işlemci türü.

Üyeler

Genel Tür Tanımları

Veri Akışı Adı Açıklama
target_iterator Bağlı hedeflerde gezinmek için iteratör.

Ortak Oluşturucular

Veri Akışı Adı Açıklama
source_block Bir source_block nesne oluşturur.
~source_block Yıkıcı Fonksiyon source_block nesnesini yok eder.

Genel Yöntemler

Veri Akışı Adı Açıklama
kabul etmek Bu source_block nesne tarafından sunulan ve sahipliğini çağırana aktaran bir iletiyi kabul eder.
acquire_ref Bu source_block nesnesi üzerinde silme işlemini önlemek için bir referans sayısı alır.
tüketmek Daha önce bu source_block nesne tarafından sunulan ve hedef tarafından başarıyla ayrılan bir iletiyi tüketir ve sahipliğini çağırana aktarır.
link_target Hedef bloğu bu source_block nesneye bağlar.
yayın Önceki başarılı bir mesaj rezervasyonunu serbest bırakır.
release_ref Bu source_block nesne üzerinde bir başvuru sayısı serbest bırakır.
rezerve etmek Önceden bu source_block nesne tarafından sunulan bir iletiyi yedekler.
unlink_target Bir hedef bloğun bu source_block nesneyle bağlantısını kaldırır.
unlink_targets Bu source_block nesnenin tüm hedef bloklarının bağlantısını kaldırır. (Geçersiz Kılmalar ISource::unlink_targets.)

Korumalı Yöntemler

Veri Akışı Adı Açıklama
accept_message Türetilmiş bir sınıfta geçersiz kılındığında, kaynak tarafından sunulan bir iletiyi kabul eder. İleti blokları, _MsgId'i doğrulamak ve bir ileti döndürmek için bu yöntemi geçersiz kılmalıdır.
async_send İletileri zaman uyumsuz olarak kuyruğa alır ve bu henüz yapılmadıysa bir yayma görevi başlatır
consume_message Türetilmiş bir sınıfta geçersiz kılındığında, daha önce ayrılmış bir ileti tüketir.
toplu_işlemeyi_etkinleştir Bu blok için toplu işlemeyi etkinleştirir.
initialize_source Bu source_block içinde message_propagator öğesini başlatır.
link_hedef_bildirim Bu source_block nesneye yeni bir hedefin bağlandığını bildiren bir geri çağırma.
process_input_messages Giriş iletilerini işleme. Bu yalnızca source_block'tan türeyen yayıcı bloklar için kullanışlıdır.
propagate_output_messages İletileri hedeflere yayma.
herhangi_bir_hedefe_yay Türetilmiş bir sınıfta geçersiz kılındığında, verilen iletiyi bağlantılı hedeflerin herhangi birine veya tümüne yayar. Bu, ileti blokları için ana yayma yordamıdır.
yayın_mesajı Türetilmiş bir sınıfta geçersiz kılındığında, önceki bir ileti ayırmayı iptal eder.
hedefleri_kaldır Bu kaynak bloğun tüm hedef bağlantılarını kaldırır. Bu, destructordan çağrılmalıdır.
rezerv_mesajı Türetilmiş bir sınıfta geçersiz kılındığında, bu source_block nesne tarafından daha önce sunulan bir iletiyi ayırır.
resume_propagation Türetilmiş bir sınıfta geçersiz kılındığında, rezervasyon serbest bırakıldıktan sonra yayılma işlemine devam eder.
sync_send İletileri zaman uyumlu bir şekilde kuyruğa alır ve bu henüz yapılmadıysa bir yayma görevi başlatır.
unlink_target_notification Bir hedefin bu source_block nesneyle bağlantısının kaldırıldığını bildiren geri çağırma.
bekleyen_asenkron_göndermeleri_bekle Tüm düzensiz yaymaların tamamlanmasını bekler. Bu yayıcıya özgü döndürme beklemesi, tüm asenkron yaymaların tamamlanması için yeterli zaman tanındığından emin olmak amacıyla ileti bloklarının yıkıcılarında kullanılır.

Açıklamalar

bu sınıf tarafından sağlanan bağlantı yönetimi ve eşitlemeden yararlanmak için ileti blokları bu bloktan türetilmelidir.

Devralma Hiyerarşisi

ISource

source_block

Gereksinimler

Üst bilgi: agents.h

Ad alanı: eşzamanlılık

kabul et

Bu source_block nesne tarafından sunulan ve sahipliğini çağırana aktaran bir iletiyi kabul eder.

virtual message<_Target_type>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _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 message nesnesine ait bir işaretçi.

Açıklamalar

parametresi _PTargetise yöntemi bir NULL özel durumu oluşturur.

Bir ileti bu accept blok tarafından sunulurken, ISource yöntemi bir hedef tarafından çağrılır. Döndürülen ileti işaretçisi, bu kaynak iletinin bir kopyasını yapmaya karar verirse, bloğun ITarget yöntemine geçirilen ileti işaretçisinden farklı olabilir.

kabul_mesaji

Türetilmiş bir sınıfta geçersiz kılındığında, kaynak tarafından sunulan bir iletiyi kabul eder. İleti blokları, _MsgId'i doğrulamak ve bir ileti döndürmek için bu yöntemi geçersiz kılmalıdır.

virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;

Parametreler

_MsgId
message nesnesinin çalışma zamanı nesne kimliği.

Dönüş Değeri

Çağıranın artık sahip olduğu bir mesajın işaretçisi.

Açıklamalar

Sahipliği aktarmak için, orijinal mesaj göstericisi geri döndürülmelidir. Sahipliği korumak için ileti yükünün bir kopyasının yapılması ve döndürülmesi gerekir.

acquire_ref

Bu source_block nesnesi üzerinde silme işlemini önlemek için bir referans sayısı alır.

virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);

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.

async_send

İletileri zaman uyumsuz olarak kuyruğa alır ve bu henüz yapılmadıysa bir yayma görevi başlatır

virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);

Parametreler

_Msg
Zaman uyumsuz olarak gönderilecek bir message nesne işaretçisi.

tüketmek

Daha önce bu source_block nesne tarafından sunulan ve hedef tarafından başarıyla ayrılan bir iletiyi tüketir ve sahipliğini çağırana aktarır.

virtual message<_Target_type>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _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

Parametre _PTargetNULL olduğunda yöntem bir özel durumu fırlatır.

Yöntem, parametrenin çağrıyı yapan hedefi temsil etmediği durumda bir bad_target özel durumu oluşturur.

consume yöntemi accept yöntemine benzer, ancak her zaman true döndüren reserve çağrısından sonra gelmelidir.

mesaj tüket

Türetilmiş bir sınıfta geçersiz kılındığında, daha önce ayrılmış bir ileti tüketir.

virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;

Parametreler

_MsgId
runtime_object_identity Tüketilen nesnenin message sayısı.

Dönüş Değeri

Çağıranın artık sahip olduğu bir mesajın işaretçisi.

Açıklamalar

Bu, accept'ye benzer, ancak her zaman reserve çağrısından önce gelir.

toplu_işlemeyi_etkinleştir

Bu blok için toplu işlemeyi etkinleştirir.

void enable_batched_processing();

initialize_source

Bu source_block içinde message_propagator öğesini başlatır.

void initialize_source(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

Parametreler

_PScheduler
Görevleri zamanlamak için kullanılacak zamanlayıcı.

_PScheduleGroup
Görevleri zamanlamak için kullanılacak zamanlama grubu.

Hedef bloğu bu source_block nesneye bağlar.

virtual void link_target(_Inout_ ITarget<_Target_type>* _PTarget);

Parametreler

_PTarget
ITarget bloğuna bu source_block nesnesine bağlanmak için bir işaretçi.

Açıklamalar

Parametre _PTargetNULL olduğunda yöntem bir özel durumu fırlatır.

Bu source_block nesneye yeni bir hedefin bağlandığını bildiren bir geri çağırma.

virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);

girdi_mesajlarını_işle

Giriş iletilerini işleme. Bu yalnızca source_block'tan türeyen yayıcı bloklar için kullanışlıdır.

virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);

Parametreler

_PMessage
İşlenecek mesaja ait gösterici.

çıkış_mesajlarını_yaymak

İletileri hedeflere yayma.

virtual void propagate_output_messages();

herhangi_bir_hedefe_yaymak

Türetilmiş bir sınıfta geçersiz kılındığında, verilen iletiyi bağlantılı hedeflerin herhangi birine veya tümüne yayar. Bu, ileti blokları için ana yayma yordamıdır.

virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);

Parametreler

_PMessage
Yayılacak iletinin işaretçisi.

serbest bırakma

Önceki başarılı bir mesaj rezervasyonunu serbest bırakır.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _PTarget);

Parametreler

_MsgId
runtime_object_identity Ayrılmış message nesnenin öğesi.

_PTarget
hedef bloğun release yöntemini çağıran bir işaretçisi.

Açıklamalar

Parametre _PTargetNULL olduğunda yöntem bir özel durumu fırlatır.

Yöntem, parametrenin çağrıyı yapan hedefi temsil etmediği durumda bir bad_target özel durumu oluşturur.

sürüm_mesajı

Türetilmiş bir sınıfta geçersiz kılındığında, önceki bir ileti ayırmayı iptal eder.

virtual void release_message(runtime_object_identity _MsgId) = 0;

Parametreler

_MsgId
Bırakılan message nesnesinin runtime_object_identity serbest.

release_ref

Bu source_block nesne üzerinde bir başvuru sayısı serbest bırakır.

virtual void release_ref(_Inout_ ITarget<_Target_type>* _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.

hedefleri_kaldır

Bu kaynak bloğun tüm hedef bağlantılarını kaldırır. Bu, destructordan çağrılmalıdır.

void remove_targets();

ayırmak

Önceden bu source_block nesne tarafından sunulan bir iletiyi yedekler.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Target_type>* _PTarget);

Parametreler

_MsgId
Sunulan message nesnesinin runtime_object_identity.

_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

Parametre _PTargetNULL olduğunda yöntem bir özel durumu fırlatır.

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.

rezerve_mesajı

Türetilmiş bir sınıfta geçersiz kılındığında, bu source_block nesne tarafından daha önce sunulan bir iletiyi ayırır.

virtual bool reserve_message(runtime_object_identity _MsgId) = 0;

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

Türetilmiş bir sınıfta geçersiz kılındığında, rezervasyon serbest bırakıldıktan sonra yayılma işlemine devam eder.

virtual void resume_propagation() = 0;

source_block

Bir source_block nesne oluşturur.

source_block();

~source_block

source_block nesnesini yok eder.

virtual ~source_block();

sync_send

İletileri zaman uyumlu bir şekilde kuyruğa alır ve bu henüz yapılmadıysa bir yayma görevi başlatır.

virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);

Parametreler

_Msg
Zaman uyumlu bir şekilde gönderilecek nesne message işaretçisi.

Bir hedef bloğun bu source_block nesneyle bağlantısını kaldırır.

virtual void unlink_target(_Inout_ ITarget<_Target_type>* _PTarget);

Parametreler

_PTarget
Bu source_block nesnenin bağlantısını kaldırmak için bir ITarget bloğuna işaretçi.

Açıklamalar

Parametre _PTargetNULL olduğunda yöntem bir özel durumu fırlatır.

Bir hedefin bu source_block nesneyle bağlantısının kaldırıldığını bildiren geri çağırma.

virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);

Parametreler

_PTarget
Bağlantısı kaldırılmış olan ITarget blok.

Bu source_block nesnenin tüm hedef bloklarının bağlantısını kaldırır.

virtual void unlink_targets();

bekle_ürün_async_gönderimler

Tüm düzensiz yaymaların tamamlanmasını bekler. Bu yayıcıya özgü döndürme beklemesi, tüm asenkron yaymaların tamamlanması için yeterli zaman tanındığından emin olmak amacıyla ileti bloklarının yıkıcılarında kullanılır.

void wait_for_outstanding_async_sends();

Ayrıca bkz.

Eşzamanlılık Ad Alanı
ISource Sınıfı