Het materiaal van het artikel is afkomstig uit mijn
Verbetering van het voorbeeld van de toongenerator
In de vorige
Nadat we het circuit niet langer nodig hebben, zou het vrijmaken van geheugen moeten beginnen met het stoppen van de datapijplijn. Om dit te doen, moet u de klokbron en ticker loskoppelen van het circuit met behulp van de functie ms_ticker_detach(). In ons geval moeten we de ticker loskoppelen van de filteringang leegbron:
ms_ticker_detach(ticker, voidsource)
Trouwens, na het stoppen van de transportband kunnen we het circuit veranderen en weer in gebruik nemen, waarbij we de ticker opnieuw verbinden.
Nu kunnen we het verwijderen met behulp van de functie ms_ticker_destroy():
ms_ticker_destroy(ticker)
De transportband is gestopt en we kunnen beginnen met het demonteren van delen ervan, waarbij we de filters loskoppelen. Gebruik hiervoor de functie ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
het doel van de argumenten is hetzelfde als voor de functie ms_filter_link().
We verwijderen de nu gescheiden 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, verkrijgen we een correcte programmabeëindiging vanuit het oogpunt van geheugenbeheer.
Zoals we kunnen zien, vereiste de correcte voltooiing van het programma dat we ongeveer hetzelfde aantal regels code moesten toevoegen als aan het begin, met een gemiddelde van vier regels code per filter. Het blijkt dat de omvang van de programmacode zal toenemen in verhouding tot het aantal filters dat in het project wordt gebruikt. Als we het hebben over duizend filters in het circuit, dan worden vierduizend regels routinebewerkingen voor het maken en vernietigen ervan aan uw code toegevoegd.
Nu weet u hoe u een programma dat gebruikmaakt van een mediastreamer correct afsluit. In de volgende voorbeelden zal ik omwille van de compactheid “vergeten” dit te doen. Maar je zult het niet vergeten?
De ontwikkelaars van de mediastreamer hebben geen softwaretools geleverd om de manipulatie van filters te vergemakkelijken bij het monteren/demonteren van circuits. Toch is er een helper waarmee je snel een filter in het circuit kunt plaatsen/verwijderen.
We zullen later terugkomen op het oplossen van dit probleem, wanneer het aantal filters in onze voorbeelden een paar dozijn overschrijdt.
Volgende
Bron: www.habr.com