Straipsnio medžiaga paimta iš mano
Tonų generatoriaus tobulinimo pavyzdys
Ankstesniame
Kai grandinė mums nebereikalinga, atminties atlaisvinimas turėtų prasidėti sustabdžius duomenų srautą. Norėdami tai padaryti, naudodami funkciją turite atjungti laikrodžio šaltinį ir signalą nuo grandinės ms_ticker_detach(). Mūsų atveju turime atjungti svirtį nuo filtro įvesties tuštumos šaltinis:
ms_ticker_detach(ticker, voidsource)
Beje, sustabdę konvejerį, galime pakeisti jo grandinę ir vėl pradėti eksploatuoti, vėl prijungdami tikerį.
Dabar galime jį pašalinti naudodami funkciją ms_ticker_destroy():
ms_ticker_destroy(ticker)
Konvejeris sustojo ir galime pradėti ardyti jo dalis, atjungdami filtrus. Norėdami tai padaryti, naudokite funkciją ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
argumentų tikslas yra toks pat kaip ir funkcijos ms_filter_link().
Dabar atskirtus filtrus pašaliname naudodami ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Pridėję šias eilutes į mūsų pavyzdį, gausime teisingą programos pabaigą atminties valdymo požiūriu.
Kaip matome, norint teisingai užbaigti programą, reikėjo pridėti maždaug tiek pat kodo eilučių, kiek ir pradžioje, o vienam filtrui vidutiniškai tenka keturios kodo eilutės. Pasirodo, kad programos kodo dydis didės proporcingai projekte naudojamų filtrų skaičiui. Jei kalbėsime apie tūkstantį filtrų grandinėje, tada į jūsų kodą bus įtraukti keturi tūkstančiai eilučių įprastų operacijų, skirtų jiems sukurti ir sunaikinti.
Dabar jūs žinote, kaip teisingai nutraukti programą naudojant medijos transliuotoją. Tolesniuose pavyzdžiuose kompaktiškumo dėlei „pamiršiu“ tai padaryti. Bet tu nepamirši?
Media streamer kūrėjai nepateikė programinės įrangos įrankių, palengvinančių manipuliavimą filtrais surenkant / išmontuojant grandines. Nepaisant to, yra pagalbininkas, leidžiantis greitai įdėti/išimti filtrą iš grandinės.
Prie šios problemos sprendimo grįšime vėliau, kai mūsų pavyzdžiuose filtrų skaičius viršys porą dešimčių.
Kitas
Šaltinis: www.habr.com