Het materiaal van dit artikel is afkomstig van mijn .

Verbetering van het voorbeeld van een tonale generator
In de vorige We hebben een applicatie voor een tonale generator geschreven en daarmee geluid uit de computerluidsprekers gehaald. Nu richten we ons op het feit dat onze applicatie, aan het einde van zijn werking, geen geheugen teruggeeft aan de heap. Het is tijd om duidelijkheid te scheppen over deze kwestie.
Nadat de schema niet meer nodig is, moet het vrijgeven van geheugen beginnen met het stoppen van de datastroom. Hiervoor moet de klokbron worden losgekoppeld van het schema met behulp van de functie ms_ticker_detach(). In ons geval moeten we de ticker loskoppelen van de invoer van het filter voidsource:
ms_ticker_detach(ticker, voidsource)Trouwens, na het stoppen van de datastroom kunnen we het schema wijzigen en het opnieuw in werking stellen door de ticker weer aan te sluiten.
Nu kunnen we het verwijderen met behulp van de functie ms_ticker_destroy():
ms_ticker_destroy(ticker)De datastroom is gestopt en we kunnen beginnen met het demonteren van de onderdelen door de filters los te koppelen. Hiervoor gebruiken we de functie ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);de argumetatie is hetzelfde als die van de functie ms_filter_link().
We verwijderen nu de al losgekoppelde filters met behulp van ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);Door deze regels aan ons voorbeeld toe te voegen, krijgen we een correcte afsluiting van het programma, wat betreft geheugengebruik.
Zoals we zien, vereiste een correcte afsluiting van het programma dat we ongeveer evenveel regels code toevoegden als aan het begin, gemiddeld vier regels code per filter. Dit betekent dat de grootte van de programmatuur proportioneel zal toenemen met het aantal filters dat in het project is gebruikt. Als we het hebben over duizend filters in het schema, zal vierduizend regels routinematige operaties voor creatie en vernietiging aan uw code worden toegevoegd.
Nu weet u hoe u een programma dat de mediastreamer gebruikt correct kunt afsluiten. In de volgende voorbeelden zal ik voor compactheid "vergeten" dit te doen. Maar u vergeet het toch niet?
De ontwikkelaars van de mediastreamer hebben geen softwarevoorzieningen voorzien voor het vereenvoudigen van filtermanipulaties bij het samenstellen/demonteren van schema's. Toch is er een helper waarmee u filters snel kunt in- of uitschakelen in het schema.
We zullen later terugkomen op deze kwestie wanneer het aantal filters in onze voorbeelden meer dan een paar tientallen bedraagt.
In de volgende We zullen een schema van de signaalniveaumeter opstellen en leren hoe we de meetresultaten uit het filter kunnen lezen. We zullen de meetnauwkeurigheid beoordelen.
Bron: habr.com
