Artikelmaterialet Àr hÀmtat frÄn min .

FörbÀttring av exempel pÄ tongenerator
I föregÄende Vi har skrivit en applikation för tongeneratorn och med den har vi extraherat ljud frÄn datorns högtalare. Nu ska vi uppmÀrksamma att vÄrt program, nÀr det avslutar arbetet, inte ÄterlÀmnar minnet tillbaka till högen. Det Àr dags att klargöra denna frÄga.
NÀr schemat inte lÀngre behövs, bör minnesfrigöringen börja med att stoppa datapipeline. För detta behöver vi koppla bort klockkÀllan frÄn schemat via funktionen ms_ticker_detach(). I vÄrt fall mÄste vi koppla bort tickern frÄn ingÄngen till filtret voidsource:
ms_ticker_detach(ticker, voidsource)Förresten, efter att pipelinen har stoppats kan vi Àndra dess schema och Äteruppta arbetet genom att Äteransluta tickern.
Nu kan vi radera den med hjÀlp av funktionen ms_ticker_destroy():
ms_ticker_destroy(ticker)Pipelinen Àr stoppad och vi kan börja demontera dess delar genom att koppla bort filtren. För detta anvÀnds funktionen ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);Argumentens avsedda syfte Àr detsamma som för funktionen ms_filter_link().
Vi tar nu bort de redan avkopplade filtren med hjÀlp av ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);Genom att lÀgga till dessa rader i vÄrt exempel fÄr vi en korrekt avslutning av programmet nÀr det gÀller minneshantering.
Som vi ser krÀvde en korrekt avslutning av programmet att vi lade till ungefÀr lika mÄnga rader kod som i början, dÀr medel kan vi rÀkna med fyra rader kod för varje filter. Detta innebÀr att storleken pÄ programmets kod ökar proportionellt mot antalet filter som anvÀnds i projektet. Om vi pratar om tusen filter i schemat, kommer din kod att fÄ fyra tusen extra rader rutinoperationer för skapande och förstöring.
Nu vet du hur man korrekt avslutar ett program som anvÀnder medieströmmare. I följande exempel, för att göra framstÀllningen mer kompakta, kommer jag att "glömma" detta. Men kommer du att glömma?
Utvecklarna av medieströmmare har inte förutsett programvaror för att underlĂ€tta hanteringen av filter vid montering/demontering av scheman. ĂndĂ„ finns det en hjĂ€lpfunktion som snabbt lĂ„ter en infoga/ta bort filter frĂ„n schemat.
Vi Äterkommer till att lösa denna frÄga senare nÀr antalet filter i vÄra exempel överstiger ett par dussin.
I nÀsta Vi kommer att samla in ett schema för signalnivÄmÀtaren och lÀra oss hur man lÀser av mÀtresultatet frÄn filtret. Vi bedömer mÀtprecisionen.
KĂ€lla: habr.com
