PDA

View Full Version : سوال: چک کردم مدام ساعت سیستم



vb-sosol
جمعه 11 اسفند 1391, 12:10 عصر
سلام دوستان
من در برنامه خودم نیاز دارم مدام ساعت سیستم رو برای چند تا کار چک کنم
مثلا در ساعت و دقیقه و ثانیه فلان کار خاصی انجام بده
تعداد کارهام زیاد هست!
مجبور هستم این کارها رو توی timer قرار بدم
ولی به یه مشکلی که برخوردم اینه که برنامه زیاد با cpu درگیر میشه!!!

چه راه حلی پیشنهاد میکنید که درگیری برنامه کمتر بشه و در حین حال من بتونم ساعت رو چک کنم؟

با تشکر

m.4.r.m
جمعه 11 اسفند 1391, 12:30 عصر
خوب شما همون لحظه که به ثبت و استفاده ساعت نیاز دارید استفاده کنید مشکلی پیش نمیاد به نظر بنده

vb-sosol
جمعه 11 اسفند 1391, 12:34 عصر
ببینید من نیاز دارم که مثلا در ساعت 12:10:50 یک پیغام بیاد
این ساعت هم توی دیتابیسم هست
خب من توی تایمر با یک دستور شرطی مدام دارم این اعداد رو با ساعت سیستم چک میکنم که اگه برابر هم شد کار خاصی انجام بده
تعداد کارهام زیاد هست
این که مدام تایمر داره کار میکنه باعث شده که درگیری برنامه با سیستم زیاد بشه!!!

هیچ راه حلی به غیر از تایمر نیست؟

mohsenasm
شنبه 12 اسفند 1391, 17:53 عصر
سلام
شاید بتونید از تابع sleep استفاده کنین
زمان سیستم رو پیدا کنین ( با تابع GetSystemTime ) اختلاف اونو با زمان مشخصتون پیدا کنین
یه تابع درست کنین. با تابع CreateThread براش یه Thread تعریف کنین. بعد توی اون تابع از Sleep استفاده کنین یه نمونه هم مربوط به قسمت Thread براتون گذاشتم.
اگه با Multithreading آشنایی ندارین میتونین فایل pdf ای که گذاشتم رو مطالعه کنین

joker
شنبه 12 اسفند 1391, 19:07 عصر
تايمر را روي 45 ثانيه تعريف كن .
اينطوري در هر يك دقيقه حداقل و حداكثر يكبار روتين مورد نظرت چك ميشه .
اگه روتيني كه داري حتي يكبار چك كردنش هم بار ميزاره روي اپليكيشن شما فقط بايد از همين بحث ترد ها استفاده كني
اين هم به اين معني نيست كه بار روي سيستم نميزاره ، بار پردازشي را به صورتي كه اپليكيشن شما هم جايي براي نفس كشيدن داشته باشه پخش ميكنه.

Atfilt
شنبه 12 اسفند 1391, 19:21 عصر
منم موافقم
بالا بردن اینتروال تایمر و استفاده از ترد پروگرمینگ مشکل رو حل میکنه
نکته دیگه این که اطلاعات رو یک بار از دیتا بیس بخوان و یه جایی مثل دیتاتیبلی متغیری چیزی نگه دار
اگه واسه هر بار چک کردن ساعت یه سلکت به دستابیس بزنی برنامت حسابی سنگین میشه

موفق باشی

setroyd
شنبه 12 اسفند 1391, 19:56 عصر
من یه نظری دارم میخوای زیاد درگیر نشه یا اگرم شد سبک باشه بیا از timere api استفاده کن با اینتروال 500 و از getsysteminfo استفاده کن برای به دست اوردن time این میتونه کمی سبک کنه البته راه حل خوبی نیست ولی امکان داره کمی جواب بده .

سنگینی برنامه میتونه از نحوه ی کد نویسی شما سر منشا گرفته باشه اگر راه حلی پیدا نکردی میتونی کد نویسیت رو کمی سبک و اصولی کنی .