Stoffet til artikkelen er hentet fra min
Forbedre eksempelet på tonegeneratoren
I forrige
Etter at vi ikke lenger trenger kretsen, bør frigjøring av minne begynne med å stoppe datarørledningen. For å gjøre dette må du koble klokkekilden og tickeren fra kretsen ved å bruke funksjonen ms_ticker_detach(). I vårt tilfelle må vi koble tickeren fra filterinngangen voidsource:
ms_ticker_detach(ticker, voidsource)
Forresten, etter å ha stoppet transportøren, kan vi endre kretsen og sette den i drift igjen, igjen koble tickeren.
Nå kan vi fjerne den ved å bruke funksjonen ms_ticker_destroy():
ms_ticker_destroy(ticker)
Transportøren har stoppet og vi kan begynne å demontere deler av den og koble fra filtrene. For å gjøre dette, bruk funksjonen ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
formålet med argumentene er det samme som for funksjonen ms_filter_link().
Vi fjerner de nå separerte filtrene ved hjelp av ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Ved å legge til disse linjene i vårt eksempel vil vi oppnå en korrekt programavslutning med tanke på minnehåndtering.
Som vi kan se, krevde riktig fullføring av programmet at vi la til omtrent samme antall kodelinjer som i begynnelsen, med et gjennomsnitt på fire kodelinjer per filter. Det viser seg at størrelsen på programkoden vil øke proporsjonalt med antall filtre som brukes i prosjektet. Hvis vi snakker om tusen filtre i kretsen, vil fire tusen linjer med rutineoperasjoner for å lage og ødelegge dem bli lagt til koden din.
Nå vet du hvordan du avslutter et program på riktig måte ved hjelp av en mediastreamer. I de følgende eksemplene, for kompakthetens skyld, vil jeg "glemme" å gjøre dette. Men du vil ikke glemme?
Utviklerne av mediastreameren ga ikke programvareverktøy for å lette manipulering av filtre ved montering/demontering av kretser. Likevel finnes det en hjelper som lar deg raskt sette inn/fjerne et filter fra kretsen.
Vi kommer tilbake til å løse dette problemet senere, når antallet filtre i eksemplene våre overstiger et par dusin.
Neste
Kilde: www.habr.com