توضیح در مورد ساخت نوار پر شونده
با سلام
پس منظورتون رو درست متوجه شدم. منظورتون از نوار پر شونده همونی بود که منم فکر میکردم .
evil_gates : فرض کنید شما با یک کامپیوتر P5 کار میکنید و بنده با یک سیستم P3 .
من و شما هر دو یک سیستم عامل داریم و قراره یک برنامه رو اجرا کنیم. (مثلا یک DVD رو کپی کنیم)
سرعت انتقال اطلاعات تو سیستم شما با توجه به سخت افزارهایی که دارید ممکنه 1 دقیقه طول بکشه. اما تو سیستم من همون اطلاعات بیش از چند دقیقه زمان میخواد تا کپی بشن.
ولی این اصلا ربطی به سرعت من و شما یعنی سرعت سیستم من و شما نداره. اصلا ربطی به اینکه P چند باشه نداره.
evil_gates : اینکه بنده گفتم برای داشتن یک نوار پیشرفت واقعی احتیاچ به پارامترهای مختلفی هست به همین دلیل دوست من
ما احتیاج داریم متوسط سرعت سیستم مقصد رو بدست بیاریم. متوسط حجم فایلهایی که قرار هست پردازش بشن رو هم بدست بیاریم. و بعد با داشتن این پارامترها محاسبه کنیم که چه مدت زمان طول خواهد کشید که کل عملیات مورد نظر ما انجام بشه و نوار پیشرفت رو بر اون اساس تنظیم کنیم.
بابا چرا اینقدر مسله رو بغرنج میکنید. این کار اصلا نیازی به این کارا نداره. اصلا نیازی به محاسبه مدت زمان انجام عملیت نداره.
فقط و فقط با یه پارامتر نهایی و یه پارامتر اولیه میشه اونو ساخت.
evil_gates : فرض کنید که ما یک نوار پیشرفت با moveto درست کردیم که قرار هست از نقطه صفر به نقطه 100 در عرض 60 ثانیه حرکت کنه.
نتیجه؟
در سیستم شما همزمان با کپی شدن اطلاعات به درستی نوار پیشرفت کامل میشه اما تو سیستم من با اینکه نوار پیشرفت تکمیل شده اما هنوز فایل هام در حال کپی شدن هست.
اشکال کار شما اینه که میخواهید از دستور moveto استفاده کنید. این دستور فقط زمان رو به عنوان متغیر میشناسه و کنترل کاربر رو روی حرکت اشیاء کم میکنه .درحالی که باید از دستور MoveObject استفاده کنید و لحظه به لحظه خودتون مقدار پیشرفت رو چک کنید.
evil_gates : ضمن اینکه در طول راه ممکنه کاربر کارهای دیگه ای هم انجام بده که رو سرعت سیستمش تاثیر بزاره و به همون نسبت رو سرعت پردازش اطلاعات ما. پس باید مدام این موارد رو چک کنیم و درصد تکمیل شدن نوار پیشرفتمون رو باهاش تطبیق بدیم.
به نظر شما این کار با mmb انجام میشه؟
اصلا ربطی به اینکه برنامه های دیگه فعال باشند یا چند درصد از cpu اشغال شده باشه نداره !!!
بله که با mmb میشه من تا حالا چندین نمونه از این نوارها ساختم.
evil_gates : اون پلاگین ها رو با mmb تولید کردن یا با زبانهای قدرتمند تر دیگه ای دوست عزیز؟
برای ساخت یه نوار پر شونده دو مسئله اهمیت داره:
1- پارامترهایی که میزان پیشرفت کار رو نشون بده
2- گرافیک نوار پر شونده
اون پلاگینها فقط برای بهتر بودن گرافیک نوار پر شونده هستند و نوارهایی مانند نوارهای ویندوز رو با توجه به نوع ویندوز و پوسته مورد استفاده ایجاد میکنن و اصلا ربطی به پارامترهایی که ما باید به دست بیاریم ندارن.
اصلا هم مهم نیست که با چه برنامه ای نوشته شده باشن.
بحث ما در مورد پارامترها بود که پلاگینها اصلا دخالتی در مورد اون نمیکنن.
برای مثال :
فرض کنید شما تو برنامتون میخواهید یه نوار پر شونده برای یه قسمت بزارید که مربوط به کپی کردن یه فولدر به یه جای دیگه هست. به این صورت که با انتخاب اون قسمت ، یه پنجره ی Browse for folder باز میشه و شما یه فولدر رو انتخاب میکنید ( فولدر مبدا ) و بعد یه آدرس بهش میدید تا اون فولدر رو اونجا کپی کنه با همون نام ( فولدر مقصد) .
حالا برای ساخت نوار پر شونده همونطور که گفتم نیاز به دوتا پارامتر نهایی و فعلی دارید.
ابتدا تعداد فایلهای موجود تو فولدر مبدا رو بدست میارید. تعداد اون فایلها n هست. این میشه پارامتر نهایی.
حالا با یه Script لحظه به لحظه تعداد فایلهای فولدر مقصد رو چک مینید.
وقتی اولین فایل کپی بشه تعداد
یک nام از فایها کپی شده و همینطور :
دومین فایل ---- دو nام
دهمین فایل ---- ده nام
.
.
.
nامین فایل ---- n nام یا کل فایلها.
حالا تو هر مرحه میتونید درصد پیشرفت رو با یه نسبت ساده به دست بیارید. مثلا در مرحله دهم :
ده به n رو برار با x به 100 میزارید. عدد به دست اومده برابر درصد پیشرفت هست.
حالا با دستور MoveObject نوار پر شونده رو میسازید.
اصلا هم نیاز به پلاگین نداره.
البته برای کپی کردن بهتره که به جای تعداد فایلها حجم اونا رو چک کنید.من برای اینکه مثال رو خوب بتونم توضیح بدم از تعداد استفاده کردم. هرچند که تعداد هم استفاده کنید درست کار مینه. یعنی تا فایلها تموم نشن نوار هم به 100 نمیرسه ولی نوار در این حالت توازن صحیحی نداره. چون اگه یه فایل با حجم 20mb تو فولدر باشه و بقیه فایلها حدود 50kb باشند زمان کپی کردن اون بیشتر طول میکشه که توازن رو به هم میریزه.
ولی برای کپی کردن یا دانلود یا به طور کلی انتقال اطلاعات باید حجم منتقل شده رو اندازه بگیرید ( برای مثال بالا: حجم فولدر مبدا = پارامتر نهایی و حجم لحظه ای فولدر مقصد = پارامتر فعلی)
برای جستجو بهره تعداد رو بررسی کنید و برای نصب نرم افزار بسته به کارتون هم میتونید حجم و هم تعداد رو بررسی کنید.
با این روش نه سرعت سیستم من و نه شما یا هر کس دیگه یا اینکه چند درصد از cpu آزاد باشه یا نباشه دیگه اهمیت نداره.
موفق و پیروز باشید.
