Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda, çerçevenin yerleşik zamanlayıcı desteğinin nasıl kullanılacağı açıklanmaktadır. Hem Kernel-Mode Driver Framework (KMDF) sürücüleri hem de sürüm 2'den itibaren User-Mode Driver Framework (UMDF) sürücüleri için geçerlidir.
Çerçeve, sürücülerin zamanlayıcı oluşturmasına olanak tanıyan bir zamanlayıcı nesnesi sağlar. Bir sürücü bir zamanlayıcı nesnesi oluşturup zamanlayıcının saatini başlattıktan sonra, çerçeve belirtilen süre geçtikten sonra sürücü tarafından sağlanan bir geri çağırma işlevini çağırır. İsteğe bağlı olarak, sürücünüz belirli bir süre geçtiğinde çerçevenin tekrar tekrar geri çağırma işlevini çağırması için zamanlayıcıyı ayarlayabilir.
Çerçeve zamanlayıcı nesnesi oluşturmak için sürücünüz WdfTimerCreate yöntemini çağırmalıdır. Bu yöntem bir EvtTimerFunc geri çağırma işlevini ve düzenli bir zaman aralığını kaydeder. Çerçevenin geri çağırma işlevini yalnızca bir kez çağırmasını istiyorsanız, sürücünüz düzenli zaman aralığı için sıfır belirtir.
Genellikle, sürücünüzün her cihaz için ihtiyaç duyacağı süreölçer sayısını bilirsiniz. Bu nedenle sürücü, EvtDriverDeviceAdd geri çağırma işlevinde WdfTimerCreate çağrısı yaparak zamanlayıcı nesneleri oluşturabilir ve zamanlayıcı nesnesi tanıtıcılarını bir cihaz veya kuyruk nesnesinin bağlam alanında depolayabilir.
Zamanlayıcıyı başlatmak için sürücünüz WdfTimerStart'ı çağırır ve bir "vade zamanı" iletir. Çerçeve zamanlayıcının saatini başlatır ve belirtilen süre dolduğunda EvtTimerFunc geri çağırma işlevini çağırır.
Sürücü WdfTimerCreate olarak adlandırıldığında düzenli bir zaman aralığı sağladıysa, süreölçer periyodik süreölçer olarak adlandırılır. İlk "son zaman" geçtikten sonra periyodik bir zamanlayıcının saati çalışmaya devam eder ve framework, dönemsel zaman aralığı geçtiğinde sürücünün geri çağırma işlevini tekrar tekrar çağırır. Düzenli süreölçerler otomatik olarak başlatılmaz. Dönemsel olmayan zamanlayıcılar gibi, sürücü de zamanlayıcıyı ilk kez başlatmak için oluşturduktan sonra WdfTimerStart çağrısı yapmalıdır.
Bir sürücü, süresi dolduktan sonra düzenli olmayan bir zamanlayıcıyı yeniden başlatmak için WdfTimerStart'ıEvtTimerFunc geri çağırma işlevinden çağırabilir.
Zamanlayıcıyı durdurmak için sürücü WdfTimerStop'u çağırabilir. Sürücünüz zamanlayıcıları tekrar tekrar başlatıp durdurarak yeniden kullanabilir.
Sürücünüz bir zamanlayıcı nesnesi oluşturduğunda bir ebeveyn nesne belirtmelidir. Çerçeve, ebeveyn öğe silindiğinde zamanlayıcıyı durdurur ve zamanlayıcı nesnesini siler. Bir zamanlayıcı nesnesinin üst nesnesini almak için, sürücünüz WdfTimerGetParentObject'i çağırabilir.
1.9 sürümünden önceki KMDF sürümlerinde, sürücünüzün geri çağırma işlevlerinin tümünün IRQL = PASSIVE_LEVEL'de çalışmasını istiyorsanız zamanlayıcı nesnelerini kolayca kullanamazsınız. Çerçeve, zamanlayıcı nesnesinin EvtTimerFunc geri çağırma işlevini IRQL = DISPATCH_LEVEL'de çağrılan ertelenmiş yordam çağrısı (DPC) olarak uygular. Bu nedenle, süre sonu kodunuzun PASSIVE_LEVEL EvtTimerFunc geri çağırma işlevinin PASSIVE_LEVEL çalışan bir iş öğesini kuyruğa alması gerekir.
KMDF 1.9 ve sonraki sürümlerinde, PASSIVE_LEVEL'de çalışan zamanlayıcılar olan pasif düzey zamanlayıcılar oluşturabilirsiniz. Pasif düzey zamanlayıcı oluşturmak için, sürücünüz WdfTimerCreate'ı çağırdığında WdfExecutionLevelPassive yürütme düzeyini belirtin. Sonuç olarak, çerçeve EvtTimerFunc geri çağırma fonksiyonlarını PASSIVE_LEVEL'de iş öğeleri olarak çalışan işlevler şeklinde uygular. Pasif düzey zamanlayıcıların düzenli süreölçerler olamayacağını unutmayın.
UMDF sürüm 2.0'dan başlayarak çerçeve, zamanlayıcı nesnesinin EvtTimerFunc geri çağırma işlevlerini kullanıcı modu iş parçacığı havuzundan çalışan iş parçacıkları olarak uygular. Sonuç olarak, UMDF sürücüsünün zamanlayıcı geri çağırma işlevleri her zaman PASSIVE_LEVEL çalışır.
Uyandırma Zamanlayıcıları Yok
Sistem güç verimliliği, sistemin düşük güç durumlarından devam etmelerine neden olan zamanlayıcılar tarafından azaltılır. Pil ömrünü iyileştirmenin bir yolu, sistemi uyandırmak yerine kritik olmayan periyodik işlemleri geciktirmektir. Windows 8.1'den başlayarak, KMDF veya UMDF sürücüsünde bu tür kritik olmayan işlemleri gerçekleştirmek için uyandırma zamanlayıcıları kullanamazsınız. Sistem düşük güç durumundayken süresi dolarsa uyandırma zamanlayıcısı sistemi uyandırmaz. Bunun yerine, sistem bir sonraki tam açık S0 durumunda olduğunda çerçeve sürücünün EvtTimerFunc geri çağırma işlevini çağırır.
KMDF sürüm 1.13 ve UMDF sürüm 2.0 ile başlayan uyandırma zamanlayıcıları yoktur.
Uyandırma yapılmayan bir zamanlayıcı oluşturmak için WDF_TIMER_CONFIGTolerableDelay üyesini TolerableDelayUnlimited olarak ayarlayın.
Uyandırma olmayan zamanlayıcılar hakkında daha fazla bilgi için bkz. No-Wake Zamanlayıcıları.
Yüksek Çözünürlüklü Zamanlayıcılar
Standart çerçeve zamanlayıcıları, varsayılan olarak 15,6 milisaniye olan sistem saati değer aralığıyla eşleşen bir doğruluk düzeyine sahiptir. Windows 8.1'den başlayarak yüksek çözünürlüklü zamanlayıcılar oluşturabilirsiniz. Yüksek çözünürlüklü zamanlayıcının doğruluğu bir milisaniyedir. Kesin, öngörülebilir bir süre sonu gerektiren kritik bir işlem için yüksek çözünürlüklü bir zamanlayıcı kullanabilirsiniz. Gerektirdiği sık bakımın sonucu olarak, yüksek çözünürlüklü bir zamanlayıcı pil ömrünün azalmasına neden olabilir.
Yüksek çözünürlüklü zamanlayıcılar, KMDF sürüm 1.13'den başlayarak yalnızca KMDF sürücüleri tarafından kullanılabilir.
Yüksek çözünürlüklü bir zamanlayıcı oluşturmak için WDF_TIMER_CONFIGUseHighResolutionTimer üyesini WdfTrue olarak ayarlayın ve ardından Nokta değerini istenen çözünürlüğe ayarlayın.
Aşağıdaki tabloda, sürücünün Dönem için sağladığı farklı değerlere dayalı zamanlayıcı davranışı örnekleri gösterilmektedir. Bu örneklerde sistem saati tik aralığının 15 milisaniye olduğu varsayılmaktadır.
| Süre, ms cinsinden | Standart Zamanlayıcı | Yüksek Çözünürlüklü Zamanlayıcı |
|---|---|---|
10 |
Süreölçer 0 milisaniye ile 25 milisaniye arasında sona erer. |
Zamanlayıcı, 10 milisaniyeden hemen sonra mümkün olan en kısa sürede sona erer. |
16 |
Zamanlayıcı 15 milisaniye ile 30 milisaniye arasında biter. |
Zamanlayıcının süresi, 16 milisaniyeden sonra mümkün olan en kısa sürede dolar. |
Yüksek çözünürlüklü zamanlayıcılar hakkında daha fazla bilgi için bkz. High-Resolution Zamanlayıcılar.
Zamanlayıcı doğruluğunun sistem saatinin ayrıntı düzeyiyle nasıl ilişkili olduğu hakkında daha fazla bilgi için bkz . Zamanlayıcı Doğruluğu.