Materijal članka je preuzet sa mog
Poboljšanje primjera generatora tona
U prethodnom
Nakon što nam više ne treba kolo, oslobađanje memorije bi trebalo početi zaustavljanjem cjevovoda podataka. Da biste to učinili, trebate odspojiti izvor sata i tiker iz kola pomoću funkcije ms_ticker_detach(). U našem slučaju, moramo odspojiti ticker sa ulaza filtera voidsource:
ms_ticker_detach(ticker, voidsource)
Usput, nakon zaustavljanja transportera, možemo promijeniti njegov krug i vratiti ga u rad, ponovo povezujući tiker.
Sada ga možemo ukloniti pomoću funkcije ms_ticker_destroy():
ms_ticker_destroy(ticker)
Transporter je stao i možemo početi da rastavljamo njegove dijelove, odvajajući filtere. Da biste to učinili, koristite funkciju ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
svrha argumenata je ista kao i za funkciju ms_filter_link().
Sada odvojene filtere uklanjamo pomoću ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Dodavanjem ovih redova u naš primjer, dobićemo da se program ispravno završi, sa stanovišta upravljanja memorijom.
Kao što vidimo, za ispravan završetak programa potrebno je da dodamo približno isti broj linija koda kao na početku, sa prosječno četiri reda koda po filteru. Ispada da će se veličina programskog koda povećati proporcionalno broju filtera koji se koriste u projektu. Ako govorimo o hiljadu filtera u krugu, tada će se vašem kodu dodati četiri hiljade linija rutinskih operacija za njihovo stvaranje i uništavanje.
Sada znate kako ispravno prekinuti program koji koristi medijski streamer. U sljedećim primjerima, radi kompaktnosti, to ću "zaboraviti" učiniti. Ali nećete zaboraviti?
Programeri media streamera nisu obezbijedili softverske alate za olakšavanje manipulacije filterima prilikom sklapanja/rastavljanja kola. Ipak, postoji pomoćnik koji vam omogućava da brzo umetnete/uklonite filter iz kruga.
Na rješavanje ovog problema vratit ćemo se kasnije, kada broj filtera u našim primjerima pređe nekoliko desetina.
Sljedeći
izvor: www.habr.com