記事の素材は私のものから引用しました .

トーンジェネレータの例の改良
前に トーンジェネレーターアプリケーションを作成し、それを使用してコンピューターのスピーカーからサウンドを抽出しました。ここで、プログラムが作業を終了しても、メモリをヒープに戻さないことに気が付くでしょう。この問題を明らかにするときが来ました。
回路が不要になったら、データ パイプラインを停止してメモリの解放を開始する必要があります。これを行うには、関数を使用して、回路からクロックソース(ティッカー)を切断する必要があります。 ms_ticker_detach()。私たちの場合、フィルター入力からティッカーを無効にする必要があります。 ボイドソース:
ms_ticker_detach(ticker, voidsource)ちなみに、コンベアを停止した後、スキームを変更して、ティッカーを再接続して作業を再開できます。
関数を使って削除できるようになりました ms_ticker_destroy():
ms_ticker_destroy(ticker)コンベアが停止し、フィルターを外しながら部品ごとに分解し始めることができます。このために関数が使用されます。 ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);引数の目的は関数の目的と同じである ms_filter_link().
分離されたフィルターを削除するには、 ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);これらの行を例に追加することで、メモリ管理の観点から正しいプログラム終了が得られます。
ご覧のとおり、プログラムを正しく完成させるには、最初とほぼ同じ行数のコードを追加する必要があり、フィルターごとに平均 4 行のコードを追加する必要がありました。プロジェクトで使用されるフィルターの数に比例して、プログラム コードのサイズが増加することがわかります。スキーム内のフィルターが 1,000 個ある場合、フィルターを作成および破棄するための 4,000 行の日常的な操作がコードに追加されます。
これで、メディア ストリーマーを使用してプログラムを正しく終了する方法がわかりました。以下の例では、簡潔にするために、これを行うことを「忘れて」います。でも忘れないよね?
メディアストリーマーの開発者は、回路の組み立て/分解中にフィルターの操作を容易にするソフトウェアツールを提供していませんでした。ただし、回路にフィルターをすばやく挿入したり、回路からフィルターを削除したりできるヘルパーがあります。
この問題は、例の中のフィルターの数が数十を超えたときに後で再度取り上げます。
次 信号レベルメーター回路を組み立て、フィルターからの測定結果の読み方を学びます。測定精度を評価してみましょう。
出所: habr.com
