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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin