Materiał artykułu pochodzi z mojego
Ulepszanie przykładu generatora tonów
W poprzednim
Gdy obwód nie będzie już nam potrzebny, zwalnianie pamięci należy rozpocząć od zatrzymania potoku danych. Aby to zrobić, należy odłączyć źródło zegara i ticker od obwodu za pomocą funkcji ms_ticker_detach(). W naszym przypadku musimy odłączyć ticker od wejścia filtra puste źródło:
ms_ticker_detach(ticker, voidsource)
Przy okazji, po zatrzymaniu przenośnika możemy zmienić jego obwód i ponownie uruchomić, ponownie podłączając ticker.
Teraz możemy go usunąć za pomocą funkcji ms_ticker_destroy():
ms_ticker_destroy(ticker)
Przenośnik się zatrzymał i możemy przystąpić do demontażu jego części, odłączając filtry. Aby to zrobić, użyj funkcji ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
cel argumentów jest taki sam jak w przypadku funkcji ms_filter_link().
Usuwamy teraz oddzielone filtry za pomocą ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Dodając te linie do naszego przykładu uzyskamy prawidłowe zakończenie programu z punktu widzenia zarządzania pamięcią.
Jak widać, poprawne zakończenie programu wymagało od nas dodania w przybliżeniu takiej samej liczby linii kodu jak na początku, średnio po cztery linie kodu na filtr. Okazuje się, że rozmiar kodu programu będzie rósł proporcjonalnie do liczby filtrów zastosowanych w projekcie. Jeśli mówimy o tysiącu filtrów w obwodzie, to do Twojego kodu zostaną dodane cztery tysiące linii rutynowych operacji ich tworzenia i niszczenia.
Teraz wiesz, jak poprawnie zakończyć program korzystający ze streamera multimediów. W poniższych przykładach, dla zachowania zwartości, „zapomnę” to zrobić. Ale nie zapomnisz?
Twórcy streamera multimedialnego nie udostępnili narzędzi programowych ułatwiających manipulację filtrami podczas montażu/demontażu obwodów. Niemniej jednak istnieje pomocnik, który pozwala szybko włożyć/wyjąć filtr z obwodu.
Do rozwiązania tego problemu powrócimy później, gdy liczba filtrów w naszych przykładach przekroczy kilkadziesiąt.
Następny
Źródło: www.habr.com