حل مشکل در حلقه

ZOnLine

New Member
با سلام خدمت دوستان عزیز
سوالی داشتم و اون هم این که گاهی اوقات پیش میاد که با دلفی حلقه ای رو می سازیم و تا این حلقه به پایان نرسه نمی تونیم کار دیگه ای بکنیم و گاهی اوقات این کار باعث می شه که درصد استفاده از Cpu هم به صد برسه می خواستم لطف کنین و اطلاعاتی راجه به حل این مشکل در اختیارم قرار بدین
مخلص هر چی با معرفته
 

saalek110

Well-Known Member

سلام.
من دلفي بلد نيستم ولي همين ديروز داشتم به همين مسئله كه شما ذكر كرديد فكر مي كردم. حتي در بيسيك قديمي رفتم يك حلقه ساختم و بعد
cpu usage
را نگاه كردم. (( صد )) بود. در ويژوال بيسيك ما رويداد گرا كار مي كنيم ، دلفي را نمي دانم.
رويدادگرا يعني اينكه كه تا رويدادي اتفاق نيافتاده باشه ،، برنامه هيچ پروسسي نداره و
cpu usage
قاعدتا پايين بايد باشه. ولي حتي اگر در ويژوال بيسيك هم اگر حلقه بسازيم همين اتفاقي كه شما فرموديد ، حادث ميشه. البته اگر حلقه طي شدن كلش زمان بر باشه.
من از برنامه شما هيچ اطلاعي ندارم ولي فكر كنم بايستي ساختارها را عوض كنيد. بايد بر حلقه تكيه نكنيد و از رويدادها استفاده كنيد. حالا نمي دونم دلفي چه جوريه ولي در ويژوال بيسيك اين كار ممكنه.

من فقط اين نوشته را مي نويسم تا ايده اي داده باشم وگرنه چون دلفي كار نيستم نبايستي نظر مي دادم. ولي تا اساتيد بيايند ، براي كمي ارتباط و تبادل تجربه بد نيست.

در ويژوال بيسيك يك راه استفاده از تايمر است.
و اين ابزار برنده اي است. مي دانيد چرا؟
چون وقتي هر نيم ثانيه يك فرايند را راه بياندازيم و فرآيند مثلا 2 صدم ثانيه طول بكشه... آنوقت تفاضل نيم ثانيه و 2 صدم ثانيه فرصتي است كه
cpu
آزاده و مي تونه در اختيار بقيه عناصر قرار بگيره يا خود ويندوز.
من اين را در يك بازي ديدم كه با ويژوال بيسيك نوشته شده بود. در آن بازي هر نيم ثانيه چك مي شد كه آيا زير پاي آدمك خالي است يا نه. اين طوري بقيه زمان در اختيار سرعت دادن به بازي بود.
ولي اگر نويسنده از حلقه استفاده مي كرد و در ميان حلقه مي خواست اين را چك كند... كل سرعت پردازشگر گرفته مي شد.
نمي دونم اين راه بدرد شما مي خوره يا نه. ولي حداقل من اين را يك جا گفتم و خالي شدم.
يكي از راههاي ديگر ايجاد شرطهايي است درون حلقه تا زودتر از حلقه خارج بشيم. يا ايجاد چند حلقه به جاي يك حلقه و داشتن تدابيري كه برنامه زياد داخل حلقه ها نماند.

ببخشيد در كاري كه به من مربوط نيست دخالت كردم. فقط خواستم چيزايي بنويسم كه الهام دهنده باشد.
.
.
 

MnavidM

Active Member
سلام.

سالک جان حرفت کاملا درست است .

برای این نوع موارد ما می تونیم از Timer استفاده کنیم.

چون هم زیاد رو CPU فشار نمیاره و هم کنترل بیشتری روی زمان اجرای دوباره اون داریم.

موفق باشید.
نوید.
 

جدیدترین ارسال ها

بالا