Bu yüzden, çocuklar, bu kursta daha fazla
ilerlemeden önce, kullanacağımız zamanlayıcı kütüphanesine aşina olalım.
Kullanacağımız zamanlayıcı kütüphanesi çok basit ve
anlaşılırdır ve kullanımı çok kolaydır.
Şimdi bir önceki ödevin bir parçası olarak.
Sana sordum.
Bu dosyaları kopyalamak için.
İşte bu.
Timer lipsi timer lib dot etch ve timer lib test dot c projemize dahil edilmiştir.
Ve umarım bir önceki ödevi tamamlamışsınızdır.
Tamam.
Şimdi timer Lipsey ve Timer lib dot H dosyası timer kütüphanesinin bir parçasıdır.
Bu dosyalara bakmanıza hiç gerek yok.
Timer lib underscore test dot C, bu zamanlayıcı kütüphanesinin nasıl
kullanılacağını çok basit, gösterici bir programla gösteren örnek bir uygulamadır.
Bu nedenle, zamanlayıcı kütüphanesinin dahili uygulamasına bakmadan, hemen timer lib
test dot C'ye bakacağız ve gelecekteki olayları planlamak ve zamanlayıcı
tabanlı işimizi yapmak için zamanlayıcı kütüphanesini nasıl kullanacağımıza aşina olacağız.
Pekâlâ, zamanınızı ve enerjinizi boşa harcamayın.
Hemen timer lib underscore test dot c'ye bakacağız.
Bu çok basit bir program.
Timer lib dot c'ye gelirsek, yaklaşık 75 satır kod içeren
bir dosya olduğunu görebilirsiniz ve hemen ana fonksiyonla başlayacağız.
Yani bu örnek program zamanlayıcı kütüphanesini kullanmaktadır.
Bu nedenle timer dot h'yi dahil ettim ve bazı veriler aldım.
Bellekte kalıcı olan bazı veriler, statik
veriler veya yığın üzerindeki veriler olabilir.
Heap, malloc veya calloc çağrıları kullanılarak oluşturulan veri anlamına gelir.
Tamam.
Bu tür veriler oluşturmanın amacı, bu verileri zamanlayıcıya
iletmektir, böylece zamanlayıcı çağrıldığında, zamanlayıcı kütüphanesine sağlayacağımız veriler
üzerinde iş mantığına göre bazı işlemler gerçekleştirecektir.
Şimdi bir sonraki satırda hemen bir zamanlayıcı oluşturduğumuzu görebilirsiniz,
değil mi? Setup underscore timer işlevi, bir zamanlayıcı
oluşturan ve oluşturulan zamanlayıcıya işaretçiyi geri döndüren API'dir.
Bu API'nin zamanlayıcıyı oluşturduğunu, ancak zamanlayıcıyı gerçekten başlatmak için
bir API start underscore timer kullanmanız gerektiğini unutmayın.
Doğru.
Şimdi bu işleve aktarılan bu argümanları anlamanız gerekir.
Bir zamanlayıcı oluşturduğumuzda, her zaman zamanlayıcı kütüphanesine fonksiyona bir işaretçi sağlamamız
gerekir, böylece zamanlayıcı ateşlendiğinde fonksiyon işaretçisini kullanarak bu fonksiyonu çağırır.
Yani bu, işleve bir işaretçidir ve bu işlev uygulamaya aittir.
Bahsettiğim fonksiyonun bu olduğunu görebilirsiniz.
Sadece bu işleve bir işaretçi gönderiyorum.
Ve bu fonksiyonun bu prototipte olması gerektiğini unutmayın.
Yani, geçersiz olarak geri dönmelidir.
Fonksiyonun ilk argümanı zamanlayıcı tipinde olmalıdır.
İkinci argüman ise geçersiz yıldızdır.
Zamanlayıcı kütüphanesine rastgele bir fonksiyon aktaramazsınız.
Bu bir kısıtlama.
Buna saygı duymalısınız.
Tamam.
Şimdi, ikinci argüman zaman aralığıdır.
Zamanlayıcınızın bu süreden sonra ateşlenmesini istersiniz.
Milisaniye cinsinden belirtilir.
Bu yüzden zamanlayıcımın, zamanlayıcının başlatıldığı noktadan tam olarak 500 milisaniye sonra ateşlenmesini istiyorum.
Tamam.
Şimdi, her şeyi sıfır sıfır ve false olarak belirttiysem ve tabii ki
ikinci son argüman, zamanlayıcının üzerinde çalışacağı veriye işaretçi geçirmeniz gerektiğine dikkat edin.
Şimdi, bu argüman kurulumuyla, zamanlayıcınız 500 milisaniye
sonra ateşlenecek, ancak yalnızca bir kez ateşlenecektir.
Tamam.
500 milisaniye sonra zamanlayıcınız ateşlenecektir.
Zamanlayıcı ateşlenecek dediğimde, zamanlayıcının bu işlevi çağıracağı anlamına gelir.
Ve bu fonksiyonda uyguladığınız mantık ne olursa olsun zamanlayıcı tarafından yürütülecektir.
İşte bu kadar.
Zamanlayıcınız hareketsiz veya pasif hale gelecektir.
Tamam.
Sadece bir kez ateşlenecektir.
Ancak zamanlayıcınızın tekrar tekrar on kez ateşlemesini istiyorsanız.
Her 500 milisaniyeden sonra.
Ardından üç ve dört numaralı argüman kullanılacaktır.
Zamanlayıcımın ateşlemesini istiyorum.
Diyelim ki 300 milisaniye sonra.
Ve on kez.
Şimdi bu kurulumla, zamanlayıcım ilk kez 500 milisaniye sonra ateşlenecek.
Ancak bundan sonra zamanlayıcım her 300 milisaniyede bir ateşlenecek ve on kez ateşlenecek.
Tamam.
Yani on kez ateşledikten sonra, sadece benim zamanlayıcım uykuda veya pasif hale gelecek.
Yani ilk kez, zamanlayıcı 500 milisaniyeden sonra beş kez ateşlenecek ve bundan sonra
zamanlayıcı her 300 saniyede bir periyodik olarak ateşlenecek ve dokuz kez ateşlenecektir.
Ve zamanlayıcımın süresiz olarak her 300 milisaniyede bir ateşlenmesini istersem, o zaman yapacağım.
Dördüncü bağımsız değişken sıfırdır.
Yani bu, zamanlayıcının kaç kez ateşleneceği konusunda herhangi bir kısıtlama olmadığı anlamına gelir.
Uygulamanız çalıştığı sürece ateşlemeye devam edecektir.
Tamam.
Ve eğer bu son argümanı true olarak geçersem, son argüman backoff anlamına gelir.
Üstel parametre.
Şimdi geri dön.
Şimdi, üstel geri dönüş, zamanlayıcımın ilk kez 500 milisaniye sonra ateşleneceği anlamına geliyor.
İkinci kez, zamanlayıcım 300 milisaniye sonra çalışacak.
Üçüncü kez, zamanlayıcım 600 milisaniye sonra çalışacak.
Dördüncü kez, zamanlayıcım 1200 milisaniye sonra çalışacak.
Yani zamanlayıcının süresi dolduktan sonra, zamanlayıcının ateşleyeceği zaman aralığı
her seferinde, bir dahaki sefere iki katını alacağız.
Tamam.
Dolayısıyla, zamanlayıcınızın bu şekilde çalışmasını istiyorsanız, son argümanı true olarak geçirmeniz gerekir.
Böylece, bu kurulum zamanlayıcı işlevinde geçirilmesi gereken tüm parametreleri açıkladım.
Çok basit bir durum için her zaman is at zero sıfır ve false değerlerini geçebilirsiniz.
Böylece zamanlayıcımız 500 milisaniye sonra yalnızca bir kez çalışacaktır.
Bu kadar.
Bu fonksiyonun tanımını gerçekten görmek istiyorsanız, inceleyebilirsiniz.
Bu fonksiyon tanımıdır.
Aslında, zamanlayıcı lib nokta kenarına gidebilirsiniz.
Ve işte fonksiyon prototipi.
İlk sona erme zaman aralığını milisaniye cinsinden görebilirsiniz.
İkinci bağımsız değişken ise milisaniye cinsinden sonraki sona erme zaman aralığıdır.
Maksimum sona erme sayısı ve sonsuz için sıfır geçer.
Daha sonra bu, ateşlendiğinde zamanlayıcı kütüphanesi tarafından kullanılacak
olan kullanıcı uygulama belleğine işaretçi olan argümandır.
Ve zamanlayıcıdan üstel yedekleme özelliği istiyorsanız, son bağımsız değişkeni true olarak geçirin.
Aksi takdirde null veya sorry olarak bırakın.
Yanlış.
Şimdi, bu programda daha ileri giderseniz, bunun ana menü türünde bir program olduğunu görebilirsiniz.
Ve kullanıcının seçimine göre, programın Timer kütüphanesi
tarafından sağlanan çeşitli API'leri kullandığını görebilirsiniz.
Bir numaralı seçim için zamanlayıcıyı duraklatmak istiyoruz.
Ardından ikinci durum için API duraklatma zamanlayıcısını kullanabilirsiniz.
Zamanlayıcıyı duraklatma durumundan devam ettirmek istiyorsanız, zamanlayıcıyı devam ettirme özelliğini kullanabilirsiniz.
Zamanlayıcıyı baştan başlatmak istiyorsanız, API yeniden başlatma zamanlayıcısını kullanabilirsiniz.
Zamanlayıcıyı yeniden zamanlamak istiyorsanız, yani diyelim ki zamanlayıcınız her
500 milisaniyeden sonra ateşleniyordu, ancak şimdi zamanlayıcının zaman aralığını
değiştirmek istiyorsunuz, böylece zamanlayıcınız her 1000 milisaniyeden sonra ateşlenecek.
Daha sonra API'yi kullanabilir, zamanlayıcıyı yeniden planlayabilir ve zamanlayıcı
ile işiniz bittiyse, API silme zamanlayıcısını çağırmanız yeterlidir.
Zamanlayıcıyı sonsuza dek yok edecektir.
Tamam.
Aksi takdirde, zamanlayıcıyı gerçekten iptal etmek istiyorsanız, zamanlayıcıyı iptal et seçeneğini kullanabilirsiniz.
Ancak zamanlayıcıyı sil ile zamanlayıcıyı iptal et arasındaki
fark, zamanlayıcı iptal edildikten sonra tekrar başlatılabilmesidir.
Kullanıyorum.
Bu API olan zamanlayıcı API'sini başlatın.
Ancak zamanlayıcı silindiğinde sonsuza kadar yok olur.
Zamanlayıcıyı tekrar oluşturmak için kurulum zamanlayıcı API'sini kullanarak zamanlayıcıyı tekrar oluşturmanız gerekir.
Doğru.
Dolayısıyla, delete zamanlayıcısı zamanlayıcıyı sildikten sonra, zamanlayıcı nesnesi kullanılamaz hale gelir.
Sıfırdan yeniden yaratılması gerekiyor.
Ve zamanlayıcının süresinin dolmasına ne kadar kaldığını bilmek istiyorsanız,
bir API zamanlayıcısı kullanabilir, kalan süreyi milisaniye cinsinden alabilirsiniz.
Tamam.
Dolayısıyla, zamanlayıcıyı 500 milisaniye için zamanladıysanız ve diyelim ki
200 milisaniye zaten geçtiyse ve zamanlayıcının süresinin dolmasına
300 milisaniye kaldıysa, bu API size 300 döndürecektir.
Tamam.
Yani bu çok basit bir program.
Ve bu program size zamanlayıcı kütüphanesini nasıl kullanacağınızı öğretme amacına hizmet eder.
Bir sonraki ders videosunda, zamanlayıcı kütüphanesini STP projemizle entegre edeceğiz.