Der Inhalt dieses Artikels stammt von meinem .

Verbessern wir das Beispiel des Ton-Generators
In meinem vorherigen Artikel Wir haben eine Anwendung fĂŒr einen Ton-Generator geschrieben und damit Klang aus dem Computerlautsprecher extrahiert. Jetzt wollen wir klĂ€ren, dass unser Programm am Ende seiner Arbeit den Speicher nicht wieder an den Heap zurĂŒckgibt. Es ist an der Zeit, hier Klarheit zu schaffen.
Nachdem die Schaltung nicht mehr benötigt wird, sollte die Speicherfreigabe mit dem Stoppen der Datenpipeline beginnen. Dazu muss die Taktsquelle von der Schaltung getrennt werden, das Ticker mittels der Funktion ms_ticker_detach(). In unserem Fall mĂŒssen wir das Ticker vom Eingang des Filters voidsource:
ms_ticker_detach(ticker, voidsource)Ăbrigens können wir nach dem Stoppen der Pipeline die Schaltung Ă€ndern und erneut in Betrieb nehmen, indem wir das Ticker wieder anschlieĂen.
Jetzt können wir es mit der Funktion ms_ticker_destroy():
ms_ticker_destroy(ticker)Die Pipeline ist gestoppt und wir können beginnen, sie zu zerlegen, indem wir die Filter trennen. Dazu wird die Funktion ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);Die Argumentzuweisung ist die gleiche wie bei der Funktion ms_filter_link().
Wir entfernen nun die bereits getrennten Filter mit ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);Wenn wir diese Zeilen in unser Beispiel einfĂŒgen, erreichen wir ein korrektes Programmende im Hinblick auf das Speichermanagement.
Wie wir sehen, erforderte ein korrektes Programmende, dass wir ungefĂ€hr ebenso viele Codezeilen hinzufĂŒgen wie am Anfang, wobei im Durchschnitt vier Zeilen Code pro Filter notwendig waren. Das bedeutet, dass die GröĂe des Programmcodes proportional zur Anzahl der im Projekt verwendeten Filter wachsen wird. Wenn wir von tausend Filtern in einem Schema sprechen, kommen zu Ihrem Code viertausend Zeilen routinemĂ€Ăiger Operationen zum Erstellen und Zerstören hinzu.
Jetzt wissen Sie, wie man ein Programm, das einen Medienstreamer verwendet, korrekt beendet. In den nÀchsten Beispielen werde ich, zur Kompaktheit der Darstellung, dies "vergessen". Aber werden Sie das vergessen?
Die Entwickler des Medienstreamers haben keine programmatischen Mittel zur Erleichterung der Manipulation mit Filtern beim Erstellen/zerlegen von Schemata vorgesehen. Es gibt jedoch einen Helper, der es ermöglicht, Filter schnell in das Schema einzufĂŒgen oder herauszunehmen.
Wir werden dieses Problem spÀter angehen, wenn die Anzahl der Filter in unseren Beispielen mehr als ein paar Dutzend erreicht.
Im nÀchsten Wir werden das Schaltbild des Signalpegelsensors erstellen und lernen, das Messergebnis aus dem Filter zu lesen. Wir werden die Messgenauigkeit bewerten.
Quelle: habr.com
