Aracılığıyla paylaş


Zamanlayıcılar hakkında

Bu konuda zamanlayıcıların nasıl oluşturulacağı, tanımlanacağı, ayarlanacağı ve silineceği açıklanmaktadır. Uygulama, belirli bir süre geçtikten sonra bir pencere için olay zamanlamak için zamanlayıcı kullanır. Bir süreölçer için belirtilen aralık (veya zaman aşımı değeri) her geçtiğinde, sistem zamanlayıcıyla ilişkili pencereyi bildirir. Zamanlayıcının doğruluğu sistem saat hızına ve uygulamanın ileti kuyruğundan iletileri ne sıklıkta almasına bağlı olduğundan, zaman aşımı değeri yalnızca yaklaşıktır.

Bu konu aşağıdaki bölümleri içerir.

Zamanlayıcı işlemleri

Uygulamalar, SetTimer işlevini kullanarak zamanlayıcılar oluşturur. Yeni süreölçer, oluşturulduktan hemen sonra aralığı zamanlamaya başlar. Uygulama, SetTimer kullanarak zamanlayıcının zaman aşımı değerini değiştirebilir ve KillTimer işlevini kullanarak zamanlayıcıyı yok edebilir. Sistem kaynaklarını verimli bir şekilde kullanmak için uygulamaların artık gerekli olmayan zamanlayıcıları yok etmesi gerekir.

Her zamanlayıcının benzersiz bir tanımlayıcısı vardır. Zamanlayıcı oluştururken bir uygulama bir tanımlayıcı belirtebilir veya sistemin benzersiz bir değer oluşturmasını sağlayabilir. WM_TIMER iletisinin ilk parametresi, iletiyi yayımlayan zamanlayıcının tanımlayıcısını içerir.

SetTimerçağrısında bir pencere tutamacı belirtirseniz, uygulama zamanlayıcıyı bu pencereyle ilişkilendirir. Zamanlayıcı için zaman aşımı değeri her geçtiğinde, sistem zamanlayıcıyla ilişkili pencereye bir WM_TIMER iletisi postalar. SetTimerçağrısında pencere tutamacı belirtilmezse, zamanlayıcıyı oluşturan uygulamanın WM_TIMER iletileri için ileti kuyruğunu izlemesi ve uygun pencereye göndermesi gerekir.

Not

İsteğe bağlı TIMERPROC geri çağırma işlevini belirtirseniz, işlev İleti Döngüsü sırasında çağrılır ve WM_TIMERWNDPROC geri çağırmaya gönderilmez.

Süreölçer geçtiğinde size bildirilmesi gerekiyorsa, bekletilebilir bir süreölçer kullanın. Daha fazla bilgi için bkz. Beklenebilir Zamanlayıcı Nesneleri.

Yüksek çözünürlüklü zamanlayıcı

Sayaç, programlamada artan değişkene başvurmak için kullanılan genel bir terimdir. Bazı sistemler, yüksek çözünürlükte geçen süreleri sağlayan bir yüksek çözünürlük performans sayacı içerir.

Sistemde yüksek çözünürlüklü bir performans sayacı varsa, sıklığı saniye başına sayımlar halinde ifade etmek için QueryPerformanceFrequencyişlevinikullanabilirsiniz. Sayının değeri işlemciye bağlıdır. Örneğin bazı işlemcilerde sayı, işlemci saatinin döngü hızı olabilir.

QueryPerformanceCounter işlevi, yüksek çözünürlüklü performans sayacının geçerli değerini alır. Bir uygulama, kodun bir bölümünün başında ve sonunda bu işlevi çağırarak sayacı yüksek çözünürlüklü zamanlayıcı olarak kullanır. Örneğin, QueryPerformanceFrequency yüksek çözünürlüklü performans sayacının sıklığının saniyede 50.000 sayı olduğunu gösterdiğini varsayalım. Uygulama QueryPerformanceCounter kodun zamanlanacak bölümünden hemen önce ve hemen sonra çağırırsa, sayaç değerleri sırasıyla 1500 sayı ve 3500 sayı olabilir. Bu değerler, kod çalışırken 0,04 saniyenin (2000 sayım) geçtiğini gösterir.

Beklenebilir zamanlayıcı nesneleri

Belirtilen süre geldiğinde durumu sinyal durumuna geçen beklenebilir zamanlayıcı nesnesi, bir senkronizasyon nesnesidir. Oluşturulabilecek iki tür beklenebilir zamanlayıcı vardır: el ile sıfırlama ve eşitleme. Her iki türden bir zamanlayıcı da düzenli bir zamanlayıcı olabilir.

İş parçacığı, CreateWaitableTimer veya CreateWaitableTimerEx işlevini kullanarak bir zamanlayıcı nesnesi oluşturur. Oluşturma iş parçacığı, zamanlayıcının el ile sıfırlama zamanlayıcısı mı yoksa eşitleme zamanlayıcısı mı olduğunu belirtir. Oluşturma iş parçacığı zamanlayıcı nesnesi için bir ad belirtebilir. Diğer işlemlerdeki iş parçacıkları, OpenWaitableTimer işlevine yapılan çağrıda adını belirterek var olan bir zamanlayıcıya tanıtıcı açabilir. Zamanlayıcı nesnesinin tanıtıcısına sahip herhangi bir thread, zamanlayıcının durumunun sinyal verildi olarak ayarlanmasını beklemek için bekleme işlevlerinden birini kullanabilir.

İş parçacığı eşitlemesi için bekletilebilir zamanlayıcı nesnelerini kullanma hakkında daha fazla bilgi için bkz. Waitable Timer Objects.