Raksta materiāls ņemts no mana
Toņu ģeneratora uzlabošanas piemērs
Iepriekšējā
Kad ķēde mums vairs nav vajadzīga, atmiņas atbrīvošana jāsāk, apturot datu cauruļvadu. Lai to izdarītu, jums ir jāatvieno pulksteņa avots un svārsts no ķēdes, izmantojot funkciju ms_ticker_detach(). Mūsu gadījumā mums ir jāatvieno svārsts no filtra ieejas tukšais avots:
ms_ticker_detach(ticker, voidsource)
Starp citu, pēc konveijera apturēšanas mēs varam nomainīt tā ķēdi un nodot to atkal ekspluatācijā, atkal pieslēdzot sviru.
Tagad mēs varam to noņemt, izmantojot funkciju ms_ticker_destroy():
ms_ticker_destroy(ticker)
Konveijers ir apstājies, un mēs varam sākt izjaukt tā daļas, atvienojot filtrus. Lai to izdarītu, izmantojiet funkciju ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
argumentu mērķis ir tāds pats kā funkcijai ms_filter_link().
Mēs noņemam tagad atdalītos filtrus, izmantojot ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Pievienojot šīs rindas mūsu piemēram, mēs panāksim, ka programma tiks pareizi pārtraukta no atmiņas pārvaldības viedokļa.
Kā redzam, pareizai programmas pabeigšanai mums bija jāpievieno aptuveni tāds pats koda rindiņu skaits kā sākumā, vidēji vienam filtram četras koda rindiņas. Izrādās, ka programmas koda izmērs pieaugs proporcionāli projektā izmantoto filtru skaitam. Ja mēs runājam par tūkstoš filtriem ķēdē, tad jūsu kodam tiks pievienoti četri tūkstoši parasto darbību rindu to izveidošanai un iznīcināšanai.
Tagad jūs zināt, kā pareizi pārtraukt programmu, kas izmanto multivides straumētāju. Turpmākajos piemēros kompaktuma labad es “aizmirsīšu” to izdarīt. Bet vai neaizmirsīsi?
Multivides straumētāja izstrādātāji nenodrošināja programmatūras rīkus, kas atvieglotu manipulācijas ar filtriem, montējot/izjaucot shēmas. Neskatoties uz to, ir palīgs, kas ļauj ātri ievietot/izņemt filtru no ķēdes.
Mēs atgriezīsimies pie šīs problēmas risināšanas vēlāk, kad mūsu piemēros esošo filtru skaits pārsniegs pāris desmitus.
Nākamais
Avots: www.habr.com