Il materiale dell'articolo è tratto dal mio .

Miglioriamo l'esempio del generatore di toni
Nella precedente Abbiamo scritto un'applicazione generatore di toni e con essa abbiamo estratto il suono dagli altoparlanti del computer. Ora ci concentreremo sul fatto che il nostro programma, alla fine dell'esecuzione, non restituisce la memoria al heap. È giunto il momento di chiarire questa questione.
Dopo che lo schema non ci serve più, il rilascio della memoria deve iniziare con l'arresto della pipeline dei dati. Per fare ciò, dobbiamo disconnettere la sorgente del clock dallo schema utilizzando la funzione ms_ticker_detach(). Nel nostro caso dobbiamo disconnettere il ticker dall'ingresso del filtro voidsource:
ms_ticker_detach(ticker, voidsource)A proposito, dopo aver fermato la pipeline possiamo modificare il suo schema e riavviarla collegando nuovamente il ticker.
Ora possiamo eliminarlo utilizzando la funzione ms_ticker_destroy():
ms_ticker_destroy(ticker)La pipeline è bloccata e possiamo procedere allo smontaggio delle sue parti, scollegando i filtri. Per questo si utilizza la funzione ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);l'assegnazione degli argomenti è la stessa della funzione ms_filter_link().
Rimuoviamo ora i filtri già disconnessi utilizzando ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);Aggiungendo queste righe al nostro esempio, otterremo una chiusura corretta del programma in termini di gestione della memoria.
Come possiamo vedere, una chiusura corretta del programma ha richiesto di aggiungere circa lo stesso numero di righe di codice all'inizio; in media, per ogni filtro sono state necessarie quattro righe di codice. Questo significa che la dimensione del codice del programma aumenterà proporzionalmente al numero di filtri utilizzati nel progetto. Parlando di mille filtri nello schema, aggiungeremo quattromila righe di operazioni di routine per la creazione e la distruzione di essi.
Ora sapete come chiudere correttamente un programma che utilizza un media streamer. Negli esempi successivi, per brevità, 'dimenticherò' di farlo. Ma voi non dimenticherete, vero?
Gli sviluppatori del media streamer non hanno previsto strumenti software per semplificare le manipolazioni con i filtri durante l'assemblaggio/scomposizione degli schemi. Tuttavia, c'è un helper che consente di inserire/rimuovere rapidamente un filtro dallo schema.
Torneremo a risolvere questa questione più tardi, quando il numero di filtri nei nostri esempi supererà alcune decine.
Nella prossima Raccoglieremo lo schema del misuratore di livello del segnale e impareremo a leggere il risultato della misurazione dal filtro. Valuteremo l'accuratezza della misurazione.
Fonte: habr.com
