Zamanlayıcı Sınıfı
Eşzamanlılık Çalışma Zamanı zamanlayıcısı için soyutlamayı temsil eder.
Sözdizimi
class Scheduler;
Üyeler
Korumalı Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
Scheduler | sınıfının bir nesnesi Scheduler yalnızca fabrika yöntemleri kullanılarak veya örtük olarak oluşturulabilir. |
~Scheduler Yıkıcısı | Sınıfın Scheduler bir nesnesi, tüm dış başvuruları sona erdiğinde örtük olarak yok edilir. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
Attach | Zamanlayıcıyı çağıran bağlama ekler. Bu yöntem döndürdüğünde, çağıran bağlam zamanlayıcı tarafından yönetilir ve zamanlayıcı geçerli zamanlayıcı olur. |
Oluştur | Davranışı parametresi tarafından _Policy açıklanan yeni bir zamanlayıcı oluşturur, zamanlayıcıya bir ilk başvuru yerleştirir ve buna bir işaretçi döndürür. |
CreateScheduleGroup | Aşırı yüklendi. Zamanlayıcı içinde yeni bir zamanlama grubu oluşturur. parametresini _Placement alan sürüm, yeni oluşturulan zamanlama grubundaki görevlerin bu parametre tarafından belirtilen konumda yürütülmeye karşı taraflı olmasını sağlar. |
GetNumberOfVirtualProcessors | Zamanlayıcı için geçerli sanal işlemci sayısını döndürür. |
GetPolicy | Zamanlayıcının oluşturulduğu ilkenin bir kopyasını döndürür. |
Kimlik | Zamanlayıcı için benzersiz bir tanımlayıcı döndürür. |
IsAvailableLocation | Belirli bir konumun zamanlayıcıda kullanılabilir olup olmadığını belirler. |
Başvuru | Zamanlayıcı başvuru sayısını artırır. |
RegisterShutdownEvent | Zamanlayıcı kapandığında ve kendisini yok ettiğinde parametresinde _Event geçirilen Windows olay tanıtıcısının sinyal vermesine neden olur. Olay sinyallendiğinde zamanlayıcıya zamanlanmış olan tüm çalışmalar tamamlanır. Bu yöntemle birden çok kapatma olayı kaydedilebilir. |
Sürüm | Zamanlayıcı başvuru sayısını azaltma. |
ResetDefaultSchedulerPolicy | Varsayılan zamanlayıcı ilkesini çalışma zamanı varsayılanı olarak sıfırlar. Bir sonraki varsayılan zamanlayıcı oluşturulduğunda, çalışma zamanı varsayılan ilke ayarlarını kullanır. |
ScheduleTask | Aşırı yüklendi. Zamanlayıcı içinde hafif bir görev zamanlar. Hafif görev, çalışma zamanı tarafından belirlenen bir zamanlama grubuna yerleştirilir. parametresini _Placement alan sürüm, görevin belirtilen konumda yürütülmeye yönelik sapmaya neden olur. |
SetDefaultSchedulerPolicy | Kullanıcı tanımlı bir ilkenin varsayılan zamanlayıcıyı oluşturmak için kullanılmasına izin verir. Bu yöntem yalnızca işlem içinde varsayılan zamanlayıcı mevcut olmadığında çağrılabilir. Varsayılan ilke ayarlandıktan sonra, veya ResetDefaultSchedulerPolicy yöntemine SetDefaultSchedulerPolicy bir sonraki geçerli çağrıya kadar etkin kalır. |
Açıklamalar
Eşzamanlılık Çalışma Zamanı zamanlayıcı, uygulamanız tarafından kuyruğa alınan çalışmayı yürütmek için iş parçacığı gibi işletim sistemi yürütme bağlamlarıyla eşlenen yürütme bağlamlarını kullanır. 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.
Eşzamanlılık Çalışma Zamanı, paralel çalışma yürütmek için işlem başına varsayılan bir zamanlayıcı oluşturur. Ayrıca kendi zamanlayıcı örneklerinizi oluşturabilir ve bu sınıfı kullanarak işleyebilirsiniz.
Devralma Hiyerarşisi
Scheduler
Gereksinimler
Üst bilgi: concrt.h
Ad alanı: eşzamanlılık
İliştir
Zamanlayıcıyı çağıran bağlama ekler. Bu yöntem döndürdüğünde, çağıran bağlam zamanlayıcı tarafından yönetilir ve zamanlayıcı geçerli zamanlayıcı olur.
virtual void Attach() = 0;
Açıklamalar
Zamanlayıcı eklemek, zamanlayıcıya örtük olarak bir başvuru yerleştirir.
Gelecekte bir noktada zamanlayıcının kapanmasına izin vermek için CurrentScheduler::D etach yöntemini çağırmanız gerekir.
Bu yöntem zaten farklı bir zamanlayıcıya eklenmiş bir bağlamdan çağrılırsa, var olan zamanlayıcı önceki zamanlayıcı olarak anımsanır ve yeni oluşturulan zamanlayıcı geçerli zamanlayıcı olur. Yöntemini daha sonraki bir noktada çağırdığınızda CurrentScheduler::Detach
, önceki zamanlayıcı geçerli zamanlayıcı olarak geri yüklenir.
Bu zamanlayıcı, çağıran bağlamın geçerli zamanlayıcısıysa, bu yöntem improper_scheduler_attach bir özel durum oluşturur.
Oluşturma
Davranışı parametresi tarafından _Policy
açıklanan yeni bir zamanlayıcı oluşturur, zamanlayıcıya bir ilk başvuru yerleştirir ve buna bir işaretçi döndürür.
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
Parametreler
_Politika
Yeni oluşturulan zamanlayıcının davranışını açıklayan zamanlayıcı ilkesi.
Dönüş Değeri
Yeni oluşturulan bir zamanlayıcının işaretçisi. Bu Scheduler
nesnenin üzerine yerleştirilmiş bir ilk başvuru sayısı var.
Açıklamalar
yöntemiyle Create
bir zamanlayıcı oluşturulduktan sonra, ilk başvuru sayısını kaldırmak ve zamanlayıcının Release
kapanmasına izin vermek için gelecekte bir noktada yöntemini çağırmanız gerekir.
Bu yöntemle oluşturulan bir zamanlayıcı, çağıran bağlama eklenmez. Attach yöntemi kullanılarak bir bağlama eklenebilir.
Bu yöntem, scheduler_resource_allocation_error ve invalid_scheduler_policy_value gibi çeşitli özel durumlar oluşturabilir.
CreateScheduleGroup
Zamanlayıcı içinde yeni bir zamanlama grubu oluşturur. parametresini _Placement
alan sürüm, yeni oluşturulan zamanlama grubundaki görevlerin bu parametre tarafından belirtilen konumda yürütülmeye karşı taraflı olmasını sağlar.
virtual ScheduleGroup* CreateScheduleGroup() = 0;
virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;
Parametreler
_Yerleştirme
Zamanlama grubundaki görevlerin yürütmeye sapma yapacağı bir konuma başvuru.
Dönüş Değeri
Yeni oluşturulan zamanlama grubuna bir işaretçi. Bu ScheduleGroup
nesnenin üzerine yerleştirilmiş bir ilk başvuru sayısı var.
Açıklamalar
Üzerinde çalışmayı zamanlama işlemini tamamladığınızda Release yöntemini bir zamanlama grubunda çağırmanız gerekir. Zamanlayıcı, kuyruğa alınan tüm çalışmalar tamamlandığında zamanlama grubunu yok eder.
Bu zamanlayıcıyı açıkça oluşturduysanız, başvurularınızı zamanlayıcıda yayınlamadan önce içindeki grupları zamanlamak için tüm başvuruları serbest bırakmanız gerektiğini unutmayın.
GetNumberOfVirtualProcessors
Zamanlayıcı için geçerli sanal işlemci sayısını döndürür.
virtual unsigned int GetNumberOfVirtualProcessors() const = 0;
Dönüş Değeri
Zamanlayıcı için geçerli sanal işlemci sayısı.
GetPolicy
Zamanlayıcının oluşturulduğu ilkenin bir kopyasını döndürür.
virtual SchedulerPolicy GetPolicy() const = 0;
Dönüş Değeri
Zamanlayıcının oluşturulduğu ilkenin bir kopyası.
Id
Zamanlayıcı için benzersiz bir tanımlayıcı döndürür.
virtual unsigned int Id() const = 0;
Dönüş Değeri
Zamanlayıcı için benzersiz bir tanımlayıcı.
IsAvailableLocation
Belirli bir konumun zamanlayıcıda kullanılabilir olup olmadığını belirler.
virtual bool IsAvailableLocation(const location& _Placement) const = 0;
Parametreler
_Yerleştirme
Zamanlayıcının sorgulandığı konuma başvuru.
Dönüş Değeri
Bağımsız değişken tarafından _Placement
belirtilen konumun zamanlayıcıda kullanılabilir olup olmadığını gösteren bir gösterge.
Açıklamalar
Dönüş değerinin, verilen konumun kullanılabilir olup olmadığını gösteren anlık bir örnekleme olduğunu unutmayın. Birden çok zamanlayıcının varlığında, dinamik kaynak yönetimi herhangi bir noktada zamanlayıcılara kaynak ekleyebilir veya kaynaklardan kaynak alabilir. Bu durumda, belirtilen konum kullanılabilirliği değiştirebilir.
Başvuru
Zamanlayıcı başvuru sayısını artırır.
virtual unsigned int Reference() = 0 ;
Dönüş Değeri
Yeni artırılan başvuru sayısı.
Açıklamalar
Bu genellikle zamanlayıcının oluşturma ömrünü yönetmek için kullanılır. Bir zamanlayıcının başvuru sayısı sıfıra düştüğünde zamanlayıcı kapatılır ve zamanlayıcı üzerindeki tüm çalışmalar tamamlandıktan sonra kendini yok eder.
Yöntemi çağırmadan Reference
önce başvuru sayısı sıfırsa ve çağrı zamanlayıcıya ait olmayan bir bağlamdan yapılıyorsa yöntemi bir improper_scheduler_reference özel durumu oluşturur.
RegisterShutdownEvent
Zamanlayıcı kapandığında ve kendisini yok ettiğinde parametresinde _Event
geçirilen Windows olay tanıtıcısının sinyal vermesine neden olur. Olay sinyallendiğinde zamanlayıcıya zamanlanmış olan tüm çalışmalar tamamlanır. Bu yöntemle birden çok kapatma olayı kaydedilebilir.
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
Parametreler
_Olay
Zamanlayıcı kapandığında ve kendisini yok ettiğinde çalışma zamanı tarafından sinyal verilecek bir Windows olay nesnesinin tanıtıcısı.
Sürüm
Zamanlayıcı başvuru sayısını azaltma.
virtual unsigned int Release() = 0;
Dönüş Değeri
Yeni azalan başvuru sayısı.
Açıklamalar
Bu genellikle zamanlayıcının oluşturma ömrünü yönetmek için kullanılır. Bir zamanlayıcının başvuru sayısı sıfıra düştüğünde zamanlayıcı kapatılır ve zamanlayıcı üzerindeki tüm çalışmalar tamamlandıktan sonra kendini yok eder.
ResetDefaultSchedulerPolicy
Varsayılan zamanlayıcı ilkesini çalışma zamanı varsayılanı olarak sıfırlar. Bir sonraki varsayılan zamanlayıcı oluşturulduğunda, çalışma zamanı varsayılan ilke ayarlarını kullanır.
static void __cdecl ResetDefaultSchedulerPolicy();
Açıklamalar
Bu yöntem, işlem içinde varsayılan bir zamanlayıcı varken çağrılabilir. Mevcut varsayılan zamanlayıcının ilkesini etkilemez. Ancak, varsayılan zamanlayıcı kapatılacaksa ve daha sonraki bir noktada yeni bir varsayılan oluşturulacaksa, yeni zamanlayıcı çalışma zamanı varsayılan ilke ayarlarını kullanır.
Scheduler
sınıfının bir nesnesi Scheduler
yalnızca fabrika yöntemleri kullanılarak veya örtük olarak oluşturulabilir.
Scheduler();
Açıklamalar
Çağıran bağlama bir zamanlayıcı eklenmesini gerektiren çalışma zamanı işlevlerinin birçoğunu kullandığınızda, işlemin varsayılan zamanlayıcısı örtük olarak oluşturulur. PPL ve aracı katmanlarının sınıfı ve özellikleri içindeki CurrentScheduler
yöntemler genellikle örtük ek gerçekleştirir.
Ayrıca, yöntemi veya Scheduler::Create
yöntemi aracılığıyla CurrentScheduler::Create
açıkça bir zamanlayıcı oluşturabilirsiniz.
~Zamanlayıcı
Sınıfın Scheduler
bir nesnesi, tüm dış başvuruları sona erdiğinde örtük olarak yok edilir.
virtual ~Scheduler();
ScheduleTask
Zamanlayıcı içinde hafif bir görev zamanlar. Hafif görev, çalışma zamanı tarafından belirlenen bir zamanlama grubuna yerleştirilir. parametresini _Placement
alan sürüm, görevin belirtilen konumda yürütülmeye yönelik sapmaya neden olur.
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data) = 0;
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement) = 0;
Parametreler
_Yordam
Basit görevin gövdesini gerçekleştirmek için yürütülecek işlev işaretçisi.
_Veri
Görevin gövdesine parametre olarak geçirilecek verilere ilişkin geçersiz bir işaretçi.
_Yerleştirme
Hafif görevin yürütülmeye karşı önyargılı olacağı bir konuma başvuru.
SetDefaultSchedulerPolicy
Kullanıcı tanımlı bir ilkenin varsayılan zamanlayıcıyı oluşturmak için kullanılmasına izin verir. Bu yöntem yalnızca işlem içinde varsayılan zamanlayıcı mevcut olmadığında çağrılabilir. Varsayılan ilke ayarlandıktan sonra, veya ResetDefaultSchedulerPolicy yöntemine SetDefaultSchedulerPolicy
bir sonraki geçerli çağrıya kadar etkin kalır.
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
Parametreler
_Politika
Varsayılan zamanlayıcı ilkesi olarak ayarlanacak ilke.
Açıklamalar
SetDefaultSchedulerPolicy
yöntem, işlem içinde varsayılan bir zamanlayıcı zaten mevcut olduğunda çağrılırsa, çalışma zamanı bir default_scheduler_exists özel durumu oluşturur.
Ayrıca bkz.
Eşzamanlılık Ad Alanı
Zamanlayıcı Sınıfı
PolicyElementKey
Görev Zamanlayıcı