Evet arkadaşlar, şimdi bu dersten itibaren olay döngüsü mini kütüphanemizin uygulamasına başlayacağız.
Başlangıç olarak, öncelikle GitHub'dan kaynak kodunu
indireceğim, bu yüzden klonlama komutunu kullanacağım.
Burada kendi kullanıcı adınızı, kendi GitHub kullanıcı adınızı yazmanız
gerekiyor, burada benimkini yazacağım ve deponun adı US programming.
Tamam.
Böylece bu özel dizini oluşturacaktır.
Şimdi bu dizinin içine girin.
Şu anda, bu dizin neredeyse boş ve bu söylemi geliştirdikçe, bu
dizin içinde sadece bu bölümde yer alan kaynak dosyası oluşturacağım.
Ancak bir öğrenci olarak, kendi kodunuzu yazacağınız için.
Bu yüzden tüm geliştirme dosyalarınızı bu geliştirme dizini içine yazmanızı tavsiye ederim.
Böylece bu dizin sizin için boş kalacaktır.
Ve geliştirme dizini dışında, bu kursun
geliştirilmesi sırasında tüm kaynak kodlarını yazacaktım.
Bu kursun geliştirilmesi sırasında tüm proje dosyalarını oluşturacağım.
Tamam.
Bu yüzden tüm geliştirmeleri Dove dizininde yapmanız gerekir.
Bitmiş projenin tamamı ise bu marka dizininde yer alacaktır.
Başlangıç olarak, yapıştırmak için yüksek profilli bir
altın hatta tutkal mı oluşturacağız? Tamamdır.
Yani bu benim yarattığım bir had a.
Ve tüm veri yapılarını tanımlayacak ve
olay döngüsü kütüphanemiz için bir arayüz
görevi görecek API'leri bildirecek miyiz? Pekâlâ.
Çocuklar, şu anda son etkinlik döngüsündeyim.
Şimdi olay döngüsü ile çalışmak için yapılarımızda bunu bildirmeye veya tanımlamaya başlayacağız.
Başlangıç olarak, öncelikle hesaplamanın tam olarak ne olduğunu tanımlayalım.
Bu slaytı tartıştığımızda, size hesaplamanın hiçbir şey olmadığını, ancak bir
fonksiyon ve fonksiyonun argümanı olduğunu, hesaplamanın da bu olduğunu söylemiştim.
Tamam mı? Uygulamalar olay gribi görev alanına
bir görev gönderir, böylece Lup bile görevi
daha sonra bir tür zamanda dosyalayabilir.
Bu yüzden bir görevi temsil eden bir veri yapısı tanımlayarak başlayacağız.
Başlangıç olarak, işlev işaretçisinin bir prototipini tanımlayacağım.
Buna geri arama bile diyoruz.
Yani bu hiçbir şey değildir, sadece hiçbir şey olmayan Y başlangıç
argümanlarını kabul eden fonksiyona bir işaretçiyi temsil eden bir veri tipidir.
Umarım C'deki fonksiyon işaretçilerine aşinasınızdır.
Ve sonra bir görevi temsil eden son veri yapısını tanımlayacağım.
Dediğim gibi, görev hiçbir şey değildir, ancak bir işlev ve onun argümanıdır.
Bu yüzden, çalıştırılması gereken fonksiyonun işaretçisini temsil eden bir üye ekleyeceğim.
İkinci üye ise tartışma konusu olacaktı.
Tamam.
Yani bu iki üye aslında hesaplamayı temsil ediyor
ve görevlerin göreve bağlanması gerektiğini zaten biliyoruz.
Ve bu görevi bir bağlantı listesi olarak uygulayacaktık.
Yani bu belirli bir görevin bir yapının sol ve sağ işaretçilerine sahip olması gerektiği
anlamına gelir, böylece bu görev nesnesini bağlı bir liste olarak tutulan görev girdabına ekleyebiliriz.
Yani bu bir yapıda modellenir, uygulama olay yasasına yürütülecek
bir görev gönderdiğinde basitçe bir görevi temsil eder.
Uygulama, hangi işlevin yürütülmesi gerektiğini belirtmelidir.
Tamam.
Yani bu, bir fonksiyon penceresi aracılığıyla olay döngüsü iş parçacığı tarafından tetiklenecek
veya çağrılacak olan uygulamaya özel fonksiyona bir işaretçi tutacak olan fonksiyon kışıdır.
Sonra tanımlayacağımız ikinci şey.
Daha sonra tanımlayacağımız ikinci şey olay döngüsünün işleridir.
Bu yüzden olay döngüsünün bir seferde bu adımlardan biri olabileceğini
tartıştık, ya boşta bir durum ya da stil ile bitmiş.
Bu yüzden bir olay döngüsünün durumunu temsil eden bir numaralandırma tanımlayacağım.
Bu yüzden burada numaralandırmaların adını biraz daha kolay koydum.
Sadece olay döngüsü ve olay döngüsü meşgul olarak adlandırıyorum.
Görevimizi bitirmek için bunu bile almak yerine, dağıtıcıyı bile boşta bekleyin.
Bir olay döngüsünü bile dispatcher olarak adlandırmak yerine, bu veri yapısının daha
yaygın adı olduğu için olay döngüsünü olay döngüsü olarak adlandırmaya devam edeceğim.
Tamam.
Yani görev bitmiş olsa bile, bu kadar basit bir şekilde biraz meşgul olarak yeniden adlandırılır.
Peki neden döngü bile meşgul değil? Bu, olay döngümüzün Scotty
adlı yıldızından gelen görevi vurgulamakla meşgul olduğu anlamına gelir.
Tamam.
Ve son olarak, aslında bir olay döngüsünü temsil eden bir veri yapısı tanımlayacaktık.
Bu yüzden olay döngüsü adı verilen veri yapısını tanımlayacaktık.
Şimdi olay döngüsünün üyelerinin neler olması gerektiğini tartışalım.
Şimdi olay döngüsünün üyelerinin ne olması gerektiğini tartışalım.
Her şeyden önce, olay döngüsünün bir görevi vardır, Eddie.
Tamam.
Dolayısıyla, olay döngüsünün ilk üyesiyle başlamak için ilk göreve ve
görevdeki göreve bir işaretçi ve bunu bir görev olarak çağırıyoruz.
İlk görevde de hayal kırıklığına uğramıştı.
Eddie, hatırla, Tasker olay döngüsü tarafından sürdürülen bir veri yapısıdır ve bu görevin iki
bağımsız iş parçacığı tarafından manipüle edilen ortak bir veri yapısı olduğunu da tartışmıştık.
Uygulama iş parçacıkları ve olay döngüsü testi.
Bu nedenle Q'yu gerçekleştirmek için bir mutekse ihtiyacımız vardı.
Yoksa bu görevi birbirini dışlayan bir şekilde mi yaptınız?
İşte bu nedenle bir sessiz değişkenine ihtiyacımız var.
Ve buna olay döngüsü MDEX Savannah diyelim.
Ancak bu Gary R görevine yeni bir görev NQ yapacağız veya
Deku'ya ne zaman gideceksek, bu görevden bir görev, Eddy, bunları gerçekleştirecek
ve yalnızca uzun süre görevden alındıktan sonra çalışmanızı garanti edecektik.
Ve elbette, olay döngüsünün bir durumu vardır.
Öyleyse, Döngünün bile yürütüldüğü mevcut durumu temsil eden bir üye değişken tanımlayalım.
Yani bu değişken boşta ya da meşgul olabilir.
Ayrıca olay döngüsünü de tartıştık.
Ted, görevde yürütülecek herhangi bir görev yoksa askıya alınabilir.
Dolayısıyla, belirli bir iş parçacığını askıya almak için bir koşul değişkenine ihtiyacımız vardır.
Tamam.
Yani burada bir koşul değişkenimiz var.
Bu koşul değişkenini kullanarak, bu koşul
değişkenini kullanan olay döngümüzü askıya alacağız.
Olaya bakılması için sinyal gönderecektik.
Ve son olarak, dediğim gibi, olay döngümüz hiçbir şey değildir, ancak bir
tehdittir, bu nedenle aslında yürütme birimi olan posix tehdidine bir işaretçimiz olmalıdır.
Tamam.
Ayrıca, olay döngüsünün o anda yürütmekte olduğu göreve atanmış olmak da iyi bir fikirdir.
Tamam.
Görüntü döngüsünün görevden bir görev aldığını ve onu ateşlediğini zaten biliyoruz.
Yani bu, olay döngüsünün yürütmekte olduğu geçerli
toff'lara bir işaretçi tutacak olan üye değişkendir.
Olay döngüsü askıya alınmış huzur içinde dinleniyorsa boş olacaktır.
Tamam.
Yani bunlar, bir yapıyı tanımlamak ya da hatta ona bakmak için tanımlamamız gereken üyelerdir.
Bu üyelerin her birine neden olay döngüsü veri
yapısının bir parçası olarak sahip olmanız gerektiğini zaten
açıklamıştım. Yani işler oldukça basit ve kolay.
Teoriyi tartışırken tartıştığımız şeyin tam olarak aynısını uyguluyoruz.
Ne daha fazlasını ne de daha azını yapıyoruz.
Aslında, tam bir olay döngüsü kütüphanesi uygulamak için
yaklaşık 300 veya 350 satır kod gerekecektir.
Böylece insanlar bu kursun bu bölümünde olay döngüsünün uygulamasını bitirecekler.
Yani başlangıç olarak, şu anda bulması zor bir hazırlığımız var ve Event
Lou ile çalışmak için ihtiyacımız olan tüm veri yapılarını zaten tanımladık.
Şimdi yaptığımız bir sonraki derste, çift döngülerle
çalışmak için hangi API'leri yazmamız gerektiğini tartışacaktık.