Artiklens materiale er hentet fra min
Forbedring af tonegeneratoreksemplet
I det foregående
Når vi ikke længere har brug for kredsløbet, bør frigørelse af hukommelse begynde med at stoppe datapipelinen. For at gøre dette skal du afbryde urkilden og tickeren fra kredsløbet ved hjælp af funktionen ms_ticker_detach(). I vores tilfælde skal vi afbryde tickeren fra filterindgangen ugyldig kilde:
ms_ticker_detach(ticker, voidsource)
Forresten, efter at have stoppet transportøren, kan vi ændre dens kredsløb og sætte den i drift igen, igen forbinde tickeren.
Nu kan vi fjerne det ved hjælp af funktionen ms_ticker_destroy():
ms_ticker_destroy(ticker)
Transportøren er stoppet, og vi kan begynde at adskille dele af den og afmontere filtrene. For at gøre dette skal du bruge funktionen ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
formålet med argumenterne er det samme som for funktionen ms_filter_link().
Vi fjerner de nu adskilte filtre vha ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Ved at tilføje disse linjer til vores eksempel vil vi opnå en korrekt programafslutning ud fra et hukommelsesstyringssynspunkt.
Som vi kan se, krævede den korrekte afslutning af programmet, at vi tilføjede omtrent det samme antal linjer kode som i begyndelsen, med et gennemsnit på fire linjer kode pr. filter. Det viser sig, at størrelsen af programkoden vil stige i forhold til antallet af filtre, der bruges i projektet. Hvis vi taler om tusind filtre i kredsløbet, vil fire tusinde linjer med rutineoperationer til oprettelse og ødelæggelse blive tilføjet til din kode.
Nu ved du, hvordan du korrekt afslutter et program, der bruger en mediestreamer. I de følgende eksempler vil jeg for kompakthedens skyld "glemme" at gøre dette. Men du glemmer det ikke?
Udviklerne af mediestreameren leverede ikke softwareværktøjer til at lette manipulation af filtre ved samling/adskillelse af kredsløb. Ikke desto mindre er der en hjælper, der giver dig mulighed for hurtigt at indsætte/fjerne et filter fra kredsløbet.
Vi vender tilbage til at løse dette problem senere, når antallet af filtre i vores eksempler overstiger et par dusin.
Næste
Kilde: www.habr.com