Məqalənin materialı məndən götürülmüşdür
Ton generatorunun təkmilləşdirilməsi nümunəsi
Əvvəlkidə
Dövrə ehtiyacımız qalmadıqdan sonra yaddaşın boşaldılması məlumat kəmərini dayandırmaqla başlamalıdır. Bunu etmək üçün, funksiyadan istifadə edərək, saat mənbəyini və işarəni dövrədən ayırmaq lazımdır ms_ticker_detach(). Bizim vəziyyətimizdə, işarəni filtr girişindən ayırmalıyıq boşluq mənbəyi:
ms_ticker_detach(ticker, voidsource)
Yeri gəlmişkən, konveyeri dayandırdıqdan sonra onun dövrəsini dəyişdirə və yenidən işə sala bilərik, tickeri yenidən birləşdirə bilərik.
İndi funksiyadan istifadə edərək onu silə bilərik ms_ticker_destroy():
ms_ticker_destroy(ticker)
Konveyer dayandı və biz filtrləri ayıraraq onun hissələrini sökməyə başlaya bilərik. Bunu etmək üçün funksiyadan istifadə edin ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
arqumentlərin məqsədi funksiya ilə eynidir ms_filter_link().
İndi ayrılmış filtrləri istifadə edərək çıxarırıq ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Bu sətirləri nümunəmizə əlavə etməklə, yaddaşın idarə edilməsi baxımından düzgün proqramın sonunu əldə edəcəyik.
Gördüyümüz kimi, proqramın düzgün doldurulması bizdən hər filtrə orta hesabla dörd sətir kod olmaqla başlanğıcda olduğu kimi təxminən eyni sayda kod sətirini əlavə etməyi tələb etdi. Belə çıxır ki, proqram kodunun ölçüsü layihədə istifadə olunan filtrlərin sayına mütənasib olaraq artacaq. Dövrədəki min filtrdən danışsaq, kodunuza onları yaratmaq və məhv etmək üçün dörd min adi əməliyyat əlavə olunacaq.
İndi bir media axını istifadə edən bir proqramı necə düzgün şəkildə dayandıracağınızı bilirsiniz. Aşağıdakı nümunələrdə kompaktlıq üçün bunu etməyi "unudacağam". Amma unutmayacaqsan?
Media streamer-in tərtibatçıları sxemləri yığarkən/sökərkən filtrlərin manipulyasiyasını asanlaşdırmaq üçün proqram alətləri təqdim etməyiblər. Buna baxmayaraq, filtri dövrədən tez daxil etməyə / çıxarmağa imkan verən bir köməkçi var.
Nümunələrimizdəki filtrlərin sayı bir neçə ondan çox olduqda, bu məsələnin həllinə daha sonra qayıdacağıq.
Sonrakı
Mənbə: www.habr.com