Evet arkadaşlar, şimdi size zamanlayıcımızın ilk uygulamasını ve
gösterimini göstereyim, tartışacağım tek skor bu bölümde mevcut.
Bu yüzden sizi zaten GetUp dizinine yönlendirmiştim.
Sadece bu bölüme gidin.
Ve zaman olarak tartışacağım dosya örnek demo 01..
Bakın, bu tek seferlik zamanlayıcıyı oluşturduktan sonra, kısa bir süreyi periyodik
zamanlayıcıya nasıl dönüştüreceğinizi de garanti edeceğim, değil mi? Şimdi ilk zamanlayıcımızı
uygulamama izin verin, bu yüzden son zamanlayıcı örneğindeyim bir Tamil, bir
nokta bakın ve şimdi nasıl finanse edeceğimi zaten dahil ettiğimi görebilirsiniz.
Yüksek profilli sinyal, kenar ve zaman nokta reklamları gerekli
nasıl yapılır dosyalarıdır ve Linux zamanlayıcılarla çalışıyorsanız zorunludur, değil
mi? How-To dosyalarının geri kalanı ise G Lipsy kütüphanesinden
daha fazla fonksiyon kullanma eğiliminde olduğunuz için eklemeniz gerekir.
Değil mi? Ancak bu iki yüksek profilli
kişinin zamanlayıcılarla yürümesinin zorunlu olduğunu unutmayın.
Öyleyse devam edelim.
Bu yüzden yapacağım ilk şey, sadece mevcut
sistem zamanını yazdıracak bir fonksiyon yazmak olacaktır.
Değil mi? Mevcut sistem
saatini bu şekilde yazdırabilirsiniz.
Sadece time tipinde bir değişkeni inceleme altına alın ve time will fonksiyonunu kullanın.
Ancak giyilebilir T cihazındaki mevcut sistem saatini ve ardından
zaman işlevini kullanarak mevcut sistem saatini yazdırabilirsiniz, değil mi?
Aslında, mevcut sistem zamanını almanın ve yazdırmanın birçok
yolu vardır, ancak bu yollardan sadece bir tanesidir.
Tamam mı? Takımımız ateşlendiğinde, mevcut sistem zamanını
ekrana yazdıracağız, böylece zamanlayıcımızın şu anda ayarlayacağımız
sona erme süresine göre ateşlendiğini bileceğiz,
kullanıcı tanımlı bir veri yapısı alalım.
Herhangi bir veri yapısı olabilir.
Örneğin, iki sayıdan oluşan ve bu kadar basit
olan bir veri yapısını ele aldım, değil
mi? Bundan daha basit bir şey düşünemiyorum.
Ve tartıştığımız gibi, her zamanın geri
arama işleviyle ilişkili olduğu teorisini tartışırken.
Doğru.
Bu, zamanlayıcı geri arama işlevidir.
Bu yüzden zamanlayıcı geri arama işlevini burada uygulayacaktım.
Ve bu zamanlayıcı geri çağırma fonksiyonunun prototipinin tartışmamızda tartıştıklarımıza
uygun olduğunu görebilirsiniz, değil mi? Bu fonksiyonun argümanı union
sequel tipindedir ve bu argüman içinde gizlidir, doğru yapıyı
bulmak için kullanırlar, değil mi? Yani basitçe getirdiğimi görebilirsiniz,
bira giyilebilirimiz olan bir yapıyı bulmak için kullandılar.
Doğru.
Ve bu küresel bir giyilebilir ürün.
Ve bu geri arama işlevi zamanında, sadece kıskançlık değerlerini sunuyorum.
Yani temel olarak, niyetimin zamanlayıcı her ateşlendiğinde bu
kez bir geri arama işlevinin tetiklenmesi olduğunu görebilirsiniz.
Ve bu argümandan, insanlar kullanıcı tanımlı veri yapılarını getireceklerdir.
Ve sonra bu kullanıcı tanımlı dönem yapılarını yazdıracaktım.
Doğru.
Beklentim, zamanlayıcı her ateşlendiğinde ekranda bu çıktıyı görmem gerektiği yönünde.
Doğru.
Yani bu, zamanlayıcı geri çağrısının çok ama çok basit bir uygulamasıydı.
Şimdi, bu gerçek zamanlayıcıyı nasıl uygulayacağımızı görelim.
Evet çocuklar, şimdi ileriye doğru gidiyoruz.
Her zamanki gibi ana fonksiyonla başlayayım, böylece bir fonksiyon zamanlayıcı demosu yazdığımı görebilirsiniz.
Ve zamanlayıcı oluşturmak için tüm kodu bu zamanlayıcı fonksiyonunda uygulayacaktım,
değil mi? Yani fazladan bir şey yapmayacağım, sadece üçüncü bölümde
tartıştığımız şeyleri yapacağım, tamam mı? Başlangıç olarak, sadece hasta bir
olay türü sebze alacağım, çünkü bu değişken zamanlayıcının özelliklerini ayarlamak
için kullanıldı ve sonra bir zamanlayıcı giyilebilir alayım çünkü oluşturacağımız
bu zamanlayıcıya sahip, değil mi? Bu yüzden bu zamanı yerel
bir değişken olarak alıyorum, ancak böyle bir kural yok.
Bu zamanlayıcı için hafızayı saatleyebilirsiniz,
değil mi? İhtiyacınıza bağlı olarak.
Bu yüzden mevcut zamanı sıfır olarak başlatmama ve EVP değişkenini başlatmama izin verin.
Ayrıca, şu anda, teoriye göre, bu EVP değişkeninin
üç üyesini uygun değerlere ayarlamamız gerektiğini görebilirsiniz, değil
mi? İlki, geri arama işlevine bir işaretçidir.
İkincisi, bir yapıda tanımlanan kullanıcının adresidir.
Üçüncüsü ise, iş parçacığı değerinde olduğu gibi bir sabittir, değil
mi? Bu EVP veri yapısının ASI, yani PTA üyesini kullanıcı
tanımlı veri yapısına başlatmak için yapacağım şeyin aynısını yapacağım.
Doğru.
Peki, işaretçi olarak adresini atadığım kullanıcı tanımlı nesnemiz neredeydi, değil mi?
Benzer şekilde, geri arama fonksiyonumuzu çağırmak istediğimiz yolu da atayacağım, bu
yüzden geri arama fonksiyonumuzu ayrı bir iş parçacığı bağlamında çağırmak istiyorum.
Doğru.
Bu konu topçuluk alanında da tartışıldı.
Ve son olarak, bu EVP değişkeninin üçüncü
üyesi, zamanlayıcı sona erdiğinde çağrılmasını istediğimiz işlevdir.
Değil mi? Yani bu, zaten uyguladığımız
zamanlayıcı geri çağırma işlevinin adresidir.
Doğru.
Böylece bu EVP değişkeninin üç üyesinin de ayarlandığını görebilirsiniz.
Şu anda bizim için gerçekten bir zamanlayıcı yaratma zamanı.
Tamam mı? Yani yapacağım şey bir API zamanlayıcısı
çağırmak, oluşturmak, değil mi? Ve bunu tartıştığımız
gibi, bu API üç argüman kabul eder.
İlk argüman oluşturmak istediğimiz zamanlayıcı türüdür, değil mi? Yani kullandığımız en
yaygın zamanlayıcı türü gerçek zaman saatidir, değil mi? Yani bu time
or create fonksiyonuna ilk argüman olarak belirtmeniz gereken sabit bir değerdir.
İkinci argüman, daha önce başlattığımız EVP değişkeninin adresidir.
Üçüncü argüman ise oluşturmakta olduğumuz bu zamanlayıcının adresidir, değil mi? Dolayısıyla, bu
zamanlayıcı oluşturma işlevi geri döner dönmez, bu basitçe zamanlayıcımızın başlatıldığı anlamına gelir.
Henüz alarma geçmedi.
Zamanlayıcı henüz çalışmaya başlamadı, değil mi? Dolayısıyla, zamanlayıcının
oluşturulup oluşturulmadığına create işlevinin bu zamanının dönüş
değeri karar vermez, dönüş değeri sıfırdan küçüktür.
Bir miktar ekleme yapılmışsa veya başka bir şekilde gerçekleşmişse, pozitif bir değerdir.
Doğru.
Ve dönüş değerinin sıfırdan küçük olması durumunda, her zaman hata kodunu yazdırabilirsiniz,
değil mi? Şimdi bununla, zamanlayıcıyı başarıyla oluşturduk, ancak bu sefer çalışmıyor.
Şimdi bir sonraki adım, zamanlayıcımızın kaç saniye veya nanosaniye
sonra ateşlenmesini istediğimiz zamanlayıcının sona erme zamanlayıcısını belirtmemiz gerektiğidir.
Bu yüzden yine teoride tartıştığımız şeyi yapacağım,
basitçe giyilebilir ürün veya özellik türünü alacağım.
Değil mi? Ve teoride tartıştığımız gibi, basitçe
bu öğenin değerli üyesinin beş saniyeye ve
sıfır nanosaniyeye kadar bir yapıda paketlendiğini söyleyeceğim.
Doğru.
Bu da basitçe zamanlayıcımızın beş saniye sonra ve zamanlayıcı
başladıktan sonra sıfır nanosaniye sonra ateşleneceği anlamına gelir.
Şu anda, teori tartışmamızda, bu 11:42 üyesinin tartışmasını
atladık, bu yüzden sıfır olarak başlatılmasına izin verin.
Şimdilik, bu konuya kısa bir süre sonra geri döneceğim.
Ve şimdi her şey ayarlandı, bu yüzden zamanlayıcıyı gerçekten başlatma zamanı.
Değil mi? Yani zamanlayıcıyı başlatmak
API zamanlayıcısı kullanılarak yapılır.
Zaman ayarla.
Değil mi? Ve burada sadece zamanlayıcı
türünde bir değişken geçirdiğimi görebilirsiniz.
Zamanlayıcının adresini değil, aslında değer olarak aktarılan
zamanlayıcının değerini aktarmanız gerektiğine dikkat edin.
Ayrıca zamanı doğru ayarladığımız bir yapıda
saygı duyduğum maddenin adresini duraklatmanız gerekiyor.
Bu çağrı geri döndüğünde, zamanlayıcı geri sayımınız yeniden başlamış demektir,
herhangi bir nedenle hata oluştuysa bu fonksiyon negatif değer döndürür.
Dolayısıyla, ne tür bir hata oluştuğunu bilmek istemeniz durumunda,
bu API'nin geri dönüş değerini test edebilir ve mesajı
yazdırabilirsiniz, değil mi? Aksi takdirde, zamanlayıcımız başarıyla alarm vermiştir.
İzin verildi demek, zamanlayıcımız başarıyla başladı demektir, değil mi?
Yani tüm bu mantık, timer daml fonksiyonunu uyguladım ve bu timer tamal
fonksiyonunu ana fonksiyondan çağıracağım ve ayrıca sürecinizin bunu yapmasını istemeyeceğinizi de unutmayın.
Bir duraklatma fonksiyonu kullanmak için buraya bir duraklatma fonksiyonu koymalısınız,
ayırmak için başlık dosyası birimlerini hash etmelisiniz, değil mi? Gördüğünüz
gibi zamanlayıcı oluşturma ve zamanlayıcının özelliklerini ayarladıktan sonra zamanlayıcıyı çalıştırma
adımlarının üçünü de tamamladık, değil mi? Yani dudak zamanından veya
yöneticiden çocuklar, bu komutu kullanarak basitçe bir program derleyebilirsiniz.
Doğru.
Ve.
Bu derleme işlemidir ve aşağıdakileri kullanarak bir çalıştırılabilir dosya oluşturabilirsiniz.
Şimdi, bir çalıştırılabilir dosya oluşturmak için programı
ATA kütüphanesine bağlamanız gerektiğini unutmayın, değil mi
canım? Yani eksi L seçeneğini eklemeniz gerekiyor.
Bir çalıştırılabilir dosya oluştururken, değil mi?
Ve basitçe çalıştırılabilir dosyayı çalıştırabilirsiniz.
Yani çalıştırılabilir dosyayı çalıştırdığım anda görebilirsiniz.
Tam olarak beş saniye sonra zamanlayıcının ateşlendiğini ve 10-20
umutsuzluk global değişkenini yazdırdığını görebilirsiniz, değil mi? Ve
bu sefer sadece bir atış zamanlayıcısı olduğu için.
Bu nedenle, zamanın bu noktasında yalnızca bir kez ateşlendi,
programınız patron sistemimize çekildi, doğru çağrıldı ve zamanlayıcı zaten
çalıştırıldı ve çağrılan zamanlayıcı geri çağrısı işini yaptı.
Yani şu anda eğlenceli değil, değil mi?
Öyleyse zamanlayıcımızla başka bir şey yapalım.
Unutmayın ki hepimiz bu BT tartışmasını bu zamanlayıcı Spock'ın aralıklı üyesi olarak yaptık.
Değil mi? Şimdi bu 0:42 üyesinin ne işe
yaradığını tartışalım. Bu üye, saniye ve nanosaniye cinsinden
bazı zaman aralıklarını belirtmek için de kullanılır.
Değil mi? Yani zamanlayıcınızı tek çekimden
periyodik hale dönüştürmek için aralık kullanılmaz.
Yani burada, yalnızca beş olarak belirtirsem, bu basitçe zamanlayıcınızın ilk kez
value üyesinin değerine göre sona ereceği ve 1. sona ermeden sonra
zamanlayıcının interval üyesinde ayarlanan değere göre periyodik olarak ateşleneceği anlamına gelir.
Doğru.
Yani ilk sefer beş saniye sürecektir, ikinci, üçüncü, dördüncü ve bu şekilde devam edecektir.
Süreler her beş saniyeden sonra tekrar tetiklenecektir.
Bu değerin onun değeriyle aynı olması gerekmez.
Bu değerler farklı olabilir.
Örneğin, burada üç gibi agresif bir değerden bahsettiğimi varsayalım.
Doğru mu? Bu, zamanlayıcınızın zamanlayıcı ayarlama API'sinin çağrıldığı
andan itibaren beş saniye süreceği ve bundan
sonra zamanlayıcının her çağrılmasının veya süresinin dolmasının
her üç saniyede bir tetikleneceği anlamına gelir.
Şimdi tekrar, programı derleyelim ve çalıştıralım.
Yani 38. saniyede gerçekleşmesini beklediğim ilk açıklamayı görebilirsiniz ve bundan
sonra, her üç saniyede bir, zamanlayıcı ateşlemeye devam edecek ve
sonsuza kadar ateşleyecek, değil mi? Bunun bir sınırı yok.
Bu kadar basit olan şey, eğer belirttiyseniz, saniye ve nanosaniyenin sıfır olmasıdır.
Bu sadece zamanlayıcınızın tek atış olduğu ve sadece bir kez ateş edeceği anlamına gelir.
Ancak bu parametrelerden herhangi birinin değerini sıfırdan farklı olarak belirlerseniz, zamanlayıcınız periyodik hale gelir.
Doğru.
Şimdi önümüzdeki birkaç ders videosunda, bu zamanlayıcı ile neler yapabileceğimizi daha fazla keşfedeceğiz.
Değil mi? Bu zamanlayıcı ile hala
yapabileceğimiz pek çok şey var.