Aracılığıyla paylaş


Bağlam Sınıfı

Yürütme bağlamı için bir soyutlama temsil eder.

Sözdizimi

class Context;

Üyeler

Korumalı Yapıcılar

Veri Akışı Adı Açıklama
~Bağlam Yıkıcı

Genel Yöntemler

Veri Akışı Adı Açıklama
Block Geçerli bağlamı engeller.
CurrentContext Mevcut bağlama bir işaretçi döndürür.
GetId Bağlamın ait olduğu zamanlayıcı içinde bu bağlama özgü benzersiz bir tanımlayıcı döndürür.
GetScheduleGroupId Bağlamın üzerinde çalışmakta olduğu zamanlama grubu için bir tanımlayıcı döndürür.
GetVirtualProcessorId Bağlamın şu anda üzerinde yürütülmekte olduğu sanal işlemci için bir tanımlayıcı döndürür.
ID Geçerli bağlamın ait olduğu zamanlayıcı içinde benzersiz bir tanımlayıcı döndürür.
IsCurrentTaskCollectionCanceling (Geçerli Görev Koleksiyonu İptal Ediliyor mu?) Geçerli bağlamda hâlihazırda yürütülmekte olan görev koleksiyonunun, aktif bir iptal sürecinde olup olmadığını (veya yakında olacağını) belirten bir işaret döndürür.
IsSynchronouslyBlocked (Eşzamanlı Olarak Engellenmiş mi) Bağlamın eşzamanlı olarak engellenip engellenmediğini belirler. Bir bağlam, engellemeye yol açan bir eylemi açıkça gerçekleştirdiyse senkronize olarak engellenmiş kabul edilir.
Fazla abonelik Bir zamanlayıcıdaki sanal işlemcilerden birinde yürütülen bir bağlam üzerinde çağrıldığında, bir kod bloğu süresince bir zamanlayıcıya ek bir sanal işlemci enjekte eder.
ScheduleGroupId Geçerli bağlamın üzerinde çalıştığı zamanlama grubu için bir tanımlayıcı döndürür.
Unblock Bağlamın engelini kaldırır ve çalıştırılabilir duruma gelmesine neden olur.
VirtualProcessorId Geçerli bağlamın üzerinde yürütüldüğü sanal işlemci için bir tanımlayıcı döndürür.
Rekolte Başka bir bağlamın çalışabilmesi için kontrolü diğer bir bağlama devreder. Başka bir bağlam bulunmadığında, zamanlayıcı başka bir işletim sistemi thread'ine kontrolü devredebilir.

Açıklamalar

Eşzamanlı Çalışma Zamanı zamanlayıcısı (bkz Zamanlayıcı), uygulamanız tarafından kuyruğa alınan işleri yürütmek için çalışma bağlamlarını kullanır. Win32 iş parçacığı, Windows işletim sistemindeki yürütme bağlamının bir örneğidir.

Herhangi bir zamanda, bir zamanlayıcının eşzamanlılık düzeyi, Resource Manager tarafından kendisine verilen sanal işlemci sayısına eşittir. Sanal işlemci, bir işleme kaynağına yönelik bir soyutlamadır ve temel alınan sistemdeki bir donanım iş parçacığıyla eşleşir. Belirli bir zamanda sanal işlemcide yalnızca tek bir zamanlayıcı bağlamı yürütülebilir.

Zamanlayıcı doğası gereği işbirlikçidir ve yürütme bağlamı, bekleme durumuna geçmek isterse sanal işlemcisini herhangi bir zamanda farklı bir bağlama devredebilir. Bekleme süresi sona erdiğinde, zamanlayıcıdan bir sanal işlemci yürütmeye başlamadıkça devam edemez.

Devralma Hiyerarşisi

Context

Gereksinimler

Üst bilgi: concrt.h

Ad alanı: eşzamanlılık

Blok

Geçerli bağlamı engeller.

static void __cdecl Block();

Açıklamalar

Bu yöntem, şu anda çağrı bağlamıyla ilişkilendirilmiş bir zamanlayıcı yoksa, işlemin varsayılan zamanlayıcısının oluşturulmasına ve/veya çağrı bağlamlarına eklenmesine neden olur.

Çağıran bağlam bir sanal işlemcide çalışıyorsa, sanal işlemci yürütülecek başka bir çalıştırılabilir bağlam bulur veya potansiyel olarak yeni bir bağlam oluşturabilir.

Block Yöntemi çağrıldıktan veya çağrıldıktan sonra, yeniden çalışması için başka bir yürütme bağlamından Engellemeyi Kaldır yöntemine bir çağrıyla eşleştirmeniz gerekir. Kodunuzun başka bir iş parçacığının Unblock yöntemini çağırabilmesi için bağlamını yayımladığı nokta ile Block yönteminin gerçek çağrısının yapıldığı nokta arasında kritik bir süre olduğunu unutmayın. Bu süre boyunca, kendi sebepleri nedeniyle (örneğin, bir kilidi almak) engelleyip engelini kaldırabilecek herhangi bir metodu çağırmamalısınız. Block ve Unblock yöntemlerine yapılan çağrılar, engellemeyi ve engellemeyi kaldırmanın nedenini izlemez. Yalnızca bir nesne bir Block- Unblock çiftin sahipliğini içermelidir.

Bu yöntem, scheduler_resource_allocation_error dahil olmak üzere çeşitli özel durumlar oluşturabilir.

~Bağlam

virtual ~Context();

CurrentContext

Mevcut bağlama bir işaretçi döndürür.

static Context* __cdecl CurrentContext();

Dönüş Değeri

Geçerli bağlamın işaretçisi.

Açıklamalar

Bu yöntem, şu anda çağrı bağlamıyla ilişkilendirilmiş bir zamanlayıcı yoksa, işlemin varsayılan zamanlayıcısının oluşturulmasına ve/veya çağrı bağlamlarına eklenmesine neden olur.

GetId

Bağlamın ait olduğu zamanlayıcı içinde bu bağlama özgü benzersiz bir tanımlayıcı döndürür.

virtual unsigned int GetId() const = 0;

Dönüş Değeri

Bağlamın ait olduğu zamanlayıcı içinde benzersiz olan bağlamın tanımlayıcısı.

GetScheduleGroupId

Bağlamın üzerinde çalışmakta olduğu zamanlama grubu için bir tanımlayıcı döndürür.

virtual unsigned int GetScheduleGroupId() const = 0;

Dönüş Değeri

Bağlamın üzerinde çalışmakta olduğu zamanlama grubunun tanımlayıcısı.

Açıklamalar

Bu yöntemden döndürülen değer, bağlamın üzerinde yürütülmekte olduğu zamanlama grubunun anlık örneklemesidir. Bu yöntem geçerli bağlam dışında bir bağlamda çağrılırsa, değer döndürülürken eski olabilir ve buna dayanılamaz. Bu yöntem genellikle yalnızca hata ayıklama veya izleme amacıyla kullanılır.

GetVirtualProcessorId

Bağlamın şu anda üzerinde yürütülmekte olduğu sanal işlemci için bir tanımlayıcı döndürür.

virtual unsigned int GetVirtualProcessorId() const = 0;

Dönüş Değeri

Bağlam şu anda bir sanal işlemcide yürütülüyorsa, bağlamın şu anda üzerinde yürütülmekte olduğu sanal işlemcinin tanımlayıcısı; aksi takdirde değeridir -1.

Açıklamalar

Bu yöntemden döndürülen değer, bağlamın üzerinde yürütülmekte olduğu sanal işlemcinin anlık örneklemesidir. Bu değer döndürülürken eski olabilir ve bu değere dayanılamaz. Bu yöntem genellikle yalnızca hata ayıklama veya izleme amacıyla kullanılır.

Id

Geçerli bağlamın ait olduğu zamanlayıcı içinde benzersiz bir tanımlayıcı döndürür.

static unsigned int __cdecl Id();

Dönüş Değeri

Geçerli bağlam bir zamanlayıcıya eklenmişse, geçerli bağlamın ait olduğu zamanlayıcı içinde benzersiz olan geçerli bağlamın tanımlayıcısı; aksi takdirde değeridir -1.

IsCurrentTaskCollectionCanceling

Geçerli bağlamda hâlihazırda yürütülmekte olan görev koleksiyonunun, aktif bir iptal sürecinde olup olmadığını (veya yakında olacağını) belirten bir işaret döndürür.

static bool __cdecl IsCurrentTaskCollectionCanceling();

Dönüş Değeri

Çağıran bağlama bir zamanlayıcı eklenmişse ve görev grubu bu bağlamda bir görevi satır içi olarak çalıştırıyorsa, bu görev grubunun etkin bir iptalin ortasında olup olmadığının (veya kısa süre içinde olacağının) göstergesidir; aksi takdirde false değeridir.

EşzamanlıBlokluMu

Bağlamın eşzamanlı olarak engellenip engellenmediğini belirler. Bir bağlam, engellemeye yol açan bir eylemi açıkça gerçekleştirdiyse senkronize olarak engellenmiş kabul edilir.

virtual bool IsSynchronouslyBlocked() const = 0;

Dönüş Değeri

Bağlamın zaman uyumlu olarak engellenip engellenmediği.

Açıklamalar

Bir bağlam, engellemeye yol açan bir eylemi açıkça gerçekleştirdiyse senkronize olarak engellenmiş kabul edilir. İş parçacığı zamanlayıcısında, bu, Context::Block yöntemine doğrudan bir çağrıyı veya Context::Block yöntemi kullanılarak oluşturulmuş bir eşitleme nesnesini gösterir.

Bu yöntemden döndürülen değer, bağlamın zaman uyumlu olarak engellenip engellenmediğini gösteren anlık bir örnektir. Bu değer, döndürülür dönmez eski olabilir ve yalnızca çok belirli durumlarda kullanılabilir.

işleç silme

Bir Context nesne çalışma zamanı tarafından dahili olarak yok edilir. Açıkça silinemez.

void operator delete(void* _PObject);

Parametreler

_PObject
Silinecek nesnenin işaretçisi.

Fazla abonelik

Bir zamanlayıcıdaki sanal işlemcilerden birinde yürütülen bir bağlam üzerinde çağrıldığında, bir kod bloğu süresince bir zamanlayıcıya ek bir sanal işlemci enjekte eder.

static void __cdecl Oversubscribe(bool _BeginOversubscription);

Parametreler

_BeginOversubscription
ise true, fazla abonelik süresi boyunca ek bir sanal işlemci eklenmesi gerektiğini gösteren bir gösterge. ise false, fazla aboneliğin sona ermesi ve daha önce eklenen sanal işlemcinin kaldırılması gerektiğini belirten bir gösterge.

TakvimGrubuId

Geçerli bağlamın üzerinde çalıştığı zamanlama grubu için bir tanımlayıcı döndürür.

static unsigned int __cdecl ScheduleGroupId();

Dönüş Değeri

Geçerli bağlam bir zamanlayıcıya bağlanmışsa ve bir zamanlama grubunda çalışıyorsa, geçerli bağlamın üzerinde çalıştığı zamanlayıcı grubu için bir tanımlayıcı; aksi takdirde, -1 değeri.

Engeli Kaldır

Bağlamın engelini kaldırır ve çalıştırılabilir duruma gelmesine neden olur.

virtual void Unblock() = 0;

Açıklamalar

Unblock yöntemine yapılan çağrının, Block yöntemine karşılık gelen çağrıdan önce gelmesi tamamen yasaldır. Block ve Unblock yöntemlerine yapılan çağrılar düzgün bir şekilde eşlendiği sürece, çalışma zamanı her iki sıralamanın da doğal yarışını düzgün bir şekilde işler. Block çağrısından önce gelen bir Unblock çağrı, Block çağrısının etkisini ortadan kaldırır.

Bu yöntemden fırlatılabilecek birkaç istisna vardır. Bir bağlam, kendi üzerinde Unblock yöntemini çağırmaya çalışırsa, bir context_self_unblock özel durumu fırlatılır. Eğer Block ve Unblock çağrıları düzgün eşlenmemişse (örneğin, şu anda çalışmakta olan bir bağlam için iki kez Unblock çağrısı yapılır), context_unblock_unbalanced özel durumu atılır.

Kodunuzun başka bir iş parçacığının Unblock yöntemini çağırabilmesi için bağlamını yayımladığı nokta ile Block yönteminin gerçek çağrısının yapıldığı nokta arasında kritik bir süre olduğunu unutmayın. Bu süre boyunca, kendi sebepleri nedeniyle (örneğin, bir kilidi almak) engelleyip engelini kaldırabilecek herhangi bir metodu çağırmamalısınız. Block ve Unblock yöntemlerine yapılan çağrılar, engellemeyi ve engellemeyi kaldırmanın nedenini izlemez. Yalnızca bir nesne, Block ve Unblock çiftinden sorumlu olmalıdır.

VirtualProcessorId

Geçerli bağlamın üzerinde yürütüldüğü sanal işlemci için bir tanımlayıcı döndürür.

static unsigned int __cdecl VirtualProcessorId();

Dönüş Değeri

Geçerli bağlam bir zamanlayıcıya bağlıysa, geçerli bağlamın üzerinde yürütülmekte olduğu sanal işlemcinin tanımlayıcısı; aksi takdirde değeridir -1.

Açıklamalar

Bu yöntemden döndürülen değer, geçerli bağlamın üzerinde yürütülmekte olduğu sanal işlemcinin anlık örneklemesidir. Bu değer döndürülürken eski olabilir ve bu değere dayanılamaz. Bu yöntem genellikle yalnızca hata ayıklama veya izleme amacıyla kullanılır.

Rekolte

Başka bir bağlamın çalışabilmesi için kontrolü diğer bir bağlama devreder. Başka bir bağlam bulunmadığında, zamanlayıcı başka bir işletim sistemi thread'ine kontrolü devredebilir.

static void __cdecl Yield();

Açıklamalar

Bu yöntem, şu anda çağrı bağlamıyla ilişkilendirilmiş bir zamanlayıcı yoksa, işlemin varsayılan zamanlayıcısının oluşturulmasına ve/veya çağrı bağlamlarına eklenmesine neden olur.

YieldExecution

Başka bir bağlamın çalışabilmesi için kontrolü diğer bir bağlama devreder. Başka bir bağlam bulunmadığında, zamanlayıcı başka bir işletim sistemi thread'ine kontrolü devredebilir.

static void __cdecl YieldExecution();

Açıklamalar

Bu yöntem, şu anda çağrı bağlamıyla ilişkilendirilmiş bir zamanlayıcı yoksa, işlemin varsayılan zamanlayıcısının oluşturulmasına ve/veya çağrı bağlamlarına eklenmesine neden olur.

Bu işlev Visual Studio 2015'te yenidir ve Yield işleviyle aynıdır ancak Windows.h'deki Verim makrosıyla çakışmaz.

Ayrıca bkz.

Eşzamanlılık Ad Alanı
Zamanlayıcı Sınıfı
Görev Zamanlayıcı