El material del artículo fue tomado de mi .

Mejorando el ejemplo del generador de tonos
En el anterior Hemos escrito una aplicación para el generador de tonos y con ella hemos extraído sonido del altavoz de la computadora. Ahora nos enfocaremos en el hecho de que nuestro programa, al finalizar su ejecución, no devuelve la memoria al montón. Es hora de aclarar este asunto.
Después de que el esquema ya no nos sea necesario, la liberación de la memoria debe comenzar con la detención del flujo de datos. Para esto, necesitamos desconectar la fuente de reloj del esquema, el ticker, utilizando la función ms_ticker_detach(). En nuestro caso, debemos desconectar el ticker de la entrada del filtro voidsource:
ms_ticker_detach(ticker, voidsource)Por cierto, después de detener el flujo de datos, podemos modificar su esquema y volver a ponerlo en funcionamiento, reconectando el ticker de nuevo.
Ahora podemos eliminarlo utilizando la función ms_ticker_destroy():
ms_ticker_destroy(ticker)El flujo de datos está detenido y podemos comenzar a desmantelar sus partes, desconectando los filtros. Para esto se utiliza la función ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);La asignación de argumentos es la misma que en la función ms_filter_link().
Eliminamos, ahora ya desconectados, los filtros usando ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);Al agregar estas líneas a nuestro ejemplo, obtendremos una finalización correcta del programa desde el punto de vista de la gestión de memoria.
Como podemos ver, una finalización correcta del programa requirió que agregáramos aproximadamente la misma cantidad de líneas de código que al inicio, y, en promedio, nos hizo usar cuatro líneas de código por cada filtro. Así que, el tamaño del código del programa crecerá proporcionalmente al número de filtros utilizados en el proyecto. Si hablamos de mil filtros en el esquema, su código se verá incrementado con cuatro mil líneas de operaciones rutinarias para crear y destruir filtros.
Ahora sabes cómo finalizar correctamente un programa que utiliza el media streamer. En los siguientes ejemplos, por resumir, ‘olvidaré’ hacerlo. Pero, ¿tú no lo olvidarás?
Los desarrolladores del media streamer no previeron herramientas de software para facilitar la manipulación de filtros al ensamblar/desensamblar esquemas. Sin embargo, hay un helper que permite insertar/quitar filtros de manera rápida del esquema.
Volveremos a abordar esta cuestión más tarde, cuando el número de filtros en nuestros ejemplos supere la docena.
En la siguiente Reuniremos un esquema del medidor de nivel de señal y aprenderemos a leer el resultado de la medición del filtro. Evaluaremos la precisión de la medición.
Fuente: habr.com
