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ı Oluşturucular

Ad Tanım
~Bağlam Yıkıcısı

Genel Yöntemler

Ad Tanım
Block Geçerli bağlamı engeller.
Currentcontext Geçerli bağlama bir işaretçi döndürür.
GetId Bağlamın ait olduğu zamanlayıcı içinde benzersiz olan bağlam için 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.
Kimlik Geçerli bağlamın ait olduğu zamanlayıcı içinde benzersiz olan geçerli bağlam için bir tanımlayıcı döndürür.
IsCurrentTaskCollectionCanceling Geçerli bağlamda satır içi olarak yürütülmekte olan görev koleksiyonunun etkin bir iptalin ortasında olup olmadığını (veya kısa süre içinde olacağını) belirten bir gösterge döndürür.
IsSynchronouslyBlocked Bağlamın zaman uyumlu olarak engellenip engellenmeyeceğini belirler. Bir bağlam, engellemeye yol açan bir eylemi açıkça gerçekleştirdiyse zaman uyumlu olarak engellenmiş olarak kabul edilir.
Fazla abonelik Bu zamanlayıcıdaki sanal işlemcilerden birinde yürütülen bir bağlam üzerinde çağrıldığında bir kod bloğu süresi boyunca bir zamanlayıcıya ek bir sanal işlemci ekler.
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.
Verim Başka bir bağlamı yürütebilmesi için yürütmeyi verir. Verilebilecek başka bir bağlam yoksa, zamanlayıcı başka bir işletim sistemi iş parçacığına verim verebilir.

Açıklamalar

Eşzamanlılık Çalışma Zamanı zamanlayıcı (bkz . Zamanlayıcı), uygulamanız tarafından kuyruğa alınan çalışmayı yürütmek için yürütme 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şler. 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şbirliğine sahiptir ve yürütme bağlamı, bekleme durumuna geçmek isterse sanal işlemcisini herhangi bir zamanda farklı bir bağlama verebilir. Beklediğinde, zamanlayıcıdan kullanılabilir bir sanal işlemci yürütmeye başlayana kadar devam edemez.

Devralma Hiyerarşisi

Context

Gereksinimler

Üst bilgi: concrt.h

Ad alanı: eşzamanlılık

Engelle

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 yöntemini çağırabilmesi Unblock için bağlamını yayımladığı nokta ile gerçek yöntem çağrısının Block yapıldığı nokta arasında kritik bir süre olduğunu unutmayın. Bu süre boyunca, kendi nedenleriyle (örneğin, bir kilit alma) sırayla engelleyebilecek ve engellemeyi kaldırabilecek herhangi bir yöntemi çağırmamalısınız. ve Unblock yöntemine yapılan Block çağrılar engelleme 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

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

static Context* __cdecl CurrentContext();

İade 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 benzersiz olan bağlam için bir tanımlayıcı döndürür.

virtual unsigned int GetId() const = 0;

İade 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;

İade 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;

İade 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 olan geçerli bağlam için bir tanımlayıcı döndürür.

static unsigned int __cdecl Id();

İade 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 satır içi olarak yürütülmekte olan görev koleksiyonunun etkin bir iptalin ortasında olup olmadığını (veya kısa süre içinde olacağını) belirten bir gösterge döndürür.

static bool __cdecl IsCurrentTaskCollectionCanceling();

İade 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 yürütü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 değeridir false.

IsSynchronouslyBlocked

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

virtual bool IsSynchronouslyBlocked() const = 0;

İade 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 zaman uyumlu olarak engellenmiş olarak kabul edilir. İş parçacığı zamanlayıcıda bu yönteme doğrudan bir çağrıyı Context::Block veya yöntemi kullanılarak Context::Block 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

Bu zamanlayıcıdaki sanal işlemcilerden birinde yürütülen bir bağlam üzerinde çağrıldığında bir kod bloğu süresi boyunca bir zamanlayıcıya ek bir sanal işlemci ekler.

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.

ScheduleGroupId

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();

İade Değeri

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

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

Yöntemine yapılan çağrının Unblock Block yöntemine karşılık gelen çağrıdan önce gelmesi son derece yasaldır. ve Unblock yöntemlerine Block yapılan çağrılar düzgün bir şekilde eşlendiği sürece, çalışma zamanı her iki siparişin de doğal yarışını düzgün bir şekilde işler. Aramadan Unblock önce gelen bir Block çağrı, çağrının etkisini Block olumsuz etkiler.

Bu yöntemden oluşturulabilecek birkaç özel durum vardır. Bir bağlam kendi içinde yöntemini çağırmaya Unblock çalışırsa, bir context_self_unblock özel durumu oluşturulur. ve Unblock çağrıları Block düzgün eşlenmemişse (örneğin, şu anda çalışmakta olan bir bağlam için iki çağrı Unblock yapılır), context_unblock_unbalanced özel durumu oluşturulur.

Kodunuzun başka bir iş parçacığının yöntemini çağırabilmesi Unblock için bağlamını yayımladığı nokta ile gerçek yöntem çağrısının Block yapıldığı nokta arasında kritik bir süre olduğunu unutmayın. Bu süre boyunca, kendi nedenleriyle (örneğin, bir kilit alma) sırayla engelleyebilecek ve engellemeyi kaldırabilecek herhangi bir yöntemi çağırmamalısınız. ve Unblock yöntemine yapılan Block çağrılar engelleme ve engellemeyi kaldırmanın nedenini izlemez. Yalnızca bir nesnenin ve Unblock çiftinin Block sahipliği 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();

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

Verim

Başka bir bağlamı yürütebilmesi için yürütmeyi verir. Verilebilecek başka bir bağlam yoksa, zamanlayıcı başka bir işletim sistemi iş parçacığına verim verebilir.

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ı yürütebilmesi için yürütmeyi verir. Verilebilecek başka bir bağlam yoksa, zamanlayıcı başka bir işletim sistemi iş parçacığına verim verebilir.

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ı