Evet arkadaşlar, olay döngüsü kütüphanemizin uygulamasını bitirdiğimize
göre, en azından temel sürüm oldukça hazır.
Şimdi size etkinlik döngüsü kütüphanesinin gerçek haberlerini gösterebileceğim bir konumdayız.
Tamam.
Bu ders videosunda, size bir demo uygulamasının nasıl yazılacağını
göstereceğim ve uygulamanın adı demo app multiplication some doxy.
Böylece, görevi yerine getirmek için sizi kapalı olay
döngüsü kütüphanesi haline getirecek örnek bir program görebilirsiniz.
İlk görev, eklenen örneklemin tüm elemanlarının toplamını hesaplamak, ikinci
görev ise örneklem alanının tüm elemanlarının çarpımını hesaplamaktır.
Tamam.
Elbette, bir dizinin toplamını ve çarpımını bariz
bir şekilde hesaplamak için bir program yazabilirsiniz.
Ancak burada amaç, aynı hedefe ulaşmak için olay döngüsü
kütüphanesini kullanacak bir program veya uygulama kodu yazacağım.
Ana fonksiyonda, olay döngüsü kütüphanesini başlattığımı ve
ardından olay döngüsü tehdidini tetiklediğimi görebilirsiniz.
Uyuyan ifadesini ekledim, böylece.
Kuş gribi izinin başlatılması ve engellenmesi ya da askıya alınması için
küçük bir şans verebilirim, çünkü göreve yönlendirilmiş bir görev yoktur.
Sleep deyimini kaldırırsanız, ana işleviniz olay döngüsü
iş parçacığının başlatılmasına bile fırsat vermeden tamamlanacaktır.
Tamam.
İşte bu nedenle uyku ifadesini buraya ekledim.
Şimdi yapacağım şey, ana işlevde, bazı ve çarpma işlemlerini
gerçekleştirmek için olay döngüsü kütüphanesi ile görev zamanlamaya gireceğim.
Öncelikle, ADF'nin bazı öğelerini gerçekleştirmek için olay
döngüsü kütüphanesi ile bir görev zamanlayayım.
Bu yüzden yeni bir
iş oluşturma görevi yazacağım.
Bu, uygulamanın etkinliğe görev göndermek için kullandığı API'dir.
Loop Library elbette olay döngüsüne atandı, ancak
burada kış ne geçireceksiniz? İkinci argüman ve
pointer olarak hangi fonksiyona geçeceksiniz? Üçüncü argüman
olarak bilmediğimiz hangi argümanı geçireceksiniz? Pekâlâ.
Bu nedenle, düzenleme öğelerinin toplamını hesaplamak için olay
döngüsü kütüphanesi ile bir görev göndermeye çalıştığımızı unutmayın.
Ve unutmayın, işlev geri çağrısı uygulamanın olaya gönderebileceğiydi.
Döngü, fonksiyonun başlangıç argümanı olarak y'yi kabul edeceği ve hiçbir şey döndürmeyeceği şekilde bir prototipe sahip olmalıdır.
Bu, fonksiyonun prototipidir.
Biraz böyle olmalı.
Tamam.
Ve görüyoruz ki.
Hesaplama işlevlerinin, toplam ve çarpma işlemlerinin gerçekten böyle bir prototipi yoktur.
Dolayısıyla, ele almamız gereken ilk sorun budur.
İkinci husus ise, yeni iş oluşturma API'sinin geliştiricinin yalnızca bir argüman sağlamasına izin vermesidir.
Ancak toplamı ve çarpımı hesaplamak için, reklamın kendisine işaretçi ve
alandaki öğe sayısı olmak üzere iki argüman iletmemiz gerekir.
Peki, yeni iş yaratan bu fonksiyona tek bir argüman olarak birden
fazla argümanı nasıl aktarabilirsiniz? İşte bu ikinci sorun, aslında sorun değil,
olay döngüsü kütüphanesini kullanabilmek için bazı arka plan çalışmaları yapmamız gerekiyor.
Bu yüzden yapacağım ilk şey tek bir veri yapısı tanımlamak olacaktı.
Ve bu veri yapısını kullanarak, tek bir argüman
olarak iletmem gereken birden fazla argümanın etrafını sarabilirim.
Bu nedenle, düzenlemek için Bayside Russell'a işaretçi ve alanın
öğe sayısı olmak üzere iki bilgi aktarmam gerektiğini unutmayın.
Bu yüzden argüman nesnesi türünde tek bir nesne oluşturacağım ve
bu göreve argüman olarak sağlamam gereken tüm bilgileri dolduracağım.
Yeni iş API'si oluşturun.
Böylece bir argüman nesnesi oluşturduğumu ve bu argüman nesnesinin tüm
üyelerini olay döngüsü kütüphanesine aktarmam gereken tüm bilgilerle kandırdığımı görebilirsiniz.
Ve burada basitçe, işaretçiyi ve nesnenin yanına geçirecektim.
Tamam.
Bu şekilde, birden fazla argümanı tek bir nesneye sararak birden
fazla argüman iletebilir ve ardından suçu bu tek nesneye aktarabilirsiniz.
Böylece bu sorun çözüldü.
Şimdi fonksiyona bir işaretçi aktarmamız gerekiyor.
Bu, uygulamanın sahip olduğu işlevdir ve uygulama bu işlevin işaretçisini
olay döngüsü kütüphanesine göndermek ister, böylece grup kütüphanesi bile
gelecekte bir noktada bir işaretçi aracılığıyla işlev bozukluğunu tetikleyebilir.
Ancak şimdi sahip olduğu sınırlama, işlevin bu prototipte olması gerektiğidir.
Peki ne yapacağız? Çünkü olay döngüsü
kütüphanem gerçekten bu iki fonksiyonu, yani
some ve çarpma fonksiyonlarını çağırmak istiyor.
Ayrıca bu fonksiyonların her biri için bir sarmalayıcı fonksiyon oluşturacağım.
Diyelim ki bunu bir sarmalayıcı olarak çağırıyorum ve neden başlangıç argümanı?
Şimdi bu fonksiyonun prototipinin bu prototipe benzediğini görebilirsiniz ve bu nedenle
bu fonksiyonu yeni iş oluşturma API'sine ikinci bir argüman olarak aktarabiliriz.
Ancak bu işlev, bazı gerçek işlev olan bu işlevi çağırmalıdır.
Şimdi yapacağım şey, bu argümanı tipleştirmek olacak.
Ve bir argüman nesnesi olarak ve şimdi toplamı getirebilirim,
ancak gerçek API'de çalışırken ve şimdi gerçek parametreleri geçerken.
Ve işimiz bitti.
Bu nedenle, işaretçiyi some olan gerçek işleve geçirmek
yerine, işaretçiyi some sarmalayıcısına geçireceğim ve işim bitecek.
Tamam.
Aynı şeyi bu çarpma işleminde de yapabilirsiniz.
Bu yüzden çarpma işlevi için bir sarmalayıcı işlev oluşturacaktım.
Bu da gerçek çarpma API'sini içerir.
Bununla da işimiz bitti.
Bir kez daha, bir argüman nesnesi oluşturacaktım, buna argüman nesnesi diyelim.
Ve son olarak, yeni iş oluşturmak için bir API çağırın.
Ve işimiz bitti.
Böylece uygulamamın artık iki görevi olay görünümü kütüphanesine gönderdiğini görebilirsiniz.
Ve ayrıca fena değil, ana işlev hakim olmadan hemen önce, denizler ve kapalı erkeklerle bir çıktı alıyorum.
Peki şimdi ne bekliyorsunuz? Eğer bu
programı çalıştırırsam çıktısı ne olmalı? Bu
argüman nesnesi fonksiyonunun tanımını dosyanın başında
bir yere kaydırmamız gerektiğinden değil.
Ve şimdi, bu programı derlersem, derlenecektir.
Bir çalıştırılabilir dosya oluşturayım.
Ve eğer şimdi bu programı çalıştırırsam.
Görebilirsin.
Öncelikle, ana fonksiyonun sonu buradadır.
Öncelikle, ana fonksiyonumuzun çalıştığını ve tamamlandığını görebilirsiniz.
Ancak ortalama fonksiyonunun sonuna tarayıcılar eklediğimiz için, ana fonksiyonumuz
çıkmaz ve daha sonra çift döngü kütüphanesi, ADI'nin tüm
elemanlarının toplamını hesaplama görevini yürüten eklenenlerin bir kısmını hesaplar.
Ve bundan sonra, alanın tüm
elemanlarının çarpımını hesaplama görevini hesaplar.
Tamam.
Dolayısıyla, pinglerin aslında belirli bir sırada gerçekleşmediğini görebilirsiniz; bu,
akor yazdığınız kodla aynı sıradadır, öyle ki toplamınız çarpımınızdan
daha hızlı hesaplanır ve bundan sonra ana işleviniz hesaplanır.
Ve fakat işler diğer düzende gerçekleşiyor, ana işleviniz ve zorunluluğunuz.
Sonra toplama fonksiyonunun çıktısını alırsınız ve sonra bu çarpmanın çıktısına ulaşırsınız.
Tamam.
Bu nedenle, sadece görev belgeleri oluşturduğunuz, bir işi gerçekleştirmek istediğiniz, ancak
daha sonra bu işi bağımsız görevlere böldüğünüz ve daha sonra bu
görevleri yakın gelecekte yürütmek üzere planladığınız eşzamanlı programlama dünyasına hoş geldiniz.
Ve kesin ve katı bir kural yoktur.
Bu görevler herhangi bir sırada yürütülebilir.
Uyguladığınız mantık ve olay döngüsü kütüphanesi tarafından görev
alanından görevi almak ve ardından dosyalamak için sorulur.
Tamam.
Dolayısıyla bu örnek size olay döngüsü
kütüphanesinin gerçek dünyadaki kullanım durumunu göstermiyor.
Bu nedenle, bu kursun geri kalan kısmı aslında bazı gerçek dünya
programlama problemlerini çözmek için hatalı döngü kütüphanesini nasıl kullanabileceğinizi ele almaktadır.
Söylemin kalan bölümünde görüşmek üzere ve olay döngüsü
kütüphanesini kullanarak gerçekten anlamlı bir şeyi ikiye katlayalım.