مطالب مقاله از من گرفته شده است
بهبود مثال مولد آهنگ
در قبلی
پس از اینکه دیگر به مدار نیاز نداریم، آزادسازی حافظه باید با توقف خط لوله داده آغاز شود. برای انجام این کار، باید منبع ساعت و تیک تیک را با استفاده از تابع از مدار جدا کنید 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);
با اضافه کردن این خطوط به مثال خود، یک پایان برنامه صحیح از نظر مدیریت حافظه بدست می آوریم.
همانطور که می بینیم، تکمیل صحیح برنامه ما را ملزم می کرد که تقریباً همان تعداد خطوط کد اولیه را با میانگین چهار خط کد در هر فیلتر اضافه کنیم. به نظر می رسد که اندازه کد برنامه متناسب با تعداد فیلترهای مورد استفاده در پروژه افزایش می یابد. اگر در مورد هزار فیلتر در مدار صحبت کنیم، چهار هزار خط عملیات معمول برای ایجاد و از بین بردن آنها به کد شما اضافه می شود.
اکنون می دانید که چگونه برنامه ای را که از پخش کننده رسانه استفاده می کند، به درستی خاتمه دهید. در مثال های زیر، به خاطر فشردگی، این کار را «فراموش می کنم». اما شما فراموش نمی کنید؟
توسعه دهندگان پخش کننده رسانه ابزار نرم افزاری برای تسهیل دستکاری فیلترها هنگام مونتاژ/جداسازی مدارها ارائه نکرده اند. با این وجود، یک کمکی وجود دارد که به شما امکان می دهد به سرعت یک فیلتر را از مدار وارد یا خارج کنید.
ما بعداً به حل این مسئله باز خواهیم گشت، زمانی که تعداد فیلترها در نمونه های ما از دوجین بیشتر شود.
بعد
منبع: www.habr.com