PDA

View Full Version : سوال: pause برای حلقه



aapalireza
شنبه 22 آبان 1389, 17:42 عصر
سلام
من دو حلقه‌ی تو در تو دارم,
می‌خوام با یک دکمه برنامه را Pause یا Stop کنم تا وقتی start زدم از ادامش شروع کنه!
مثلاً دور 7 ام حلقه ی بیرونی و دور 200ام حلقه ی داخلی...

ممنون

mehdi.mousavi
شنبه 22 آبان 1389, 18:17 عصر
سلام من دو حلقه‌ی تو در تو دارم, می‌خوام با یک دکمه برنامه را Pause یا Stop کنم تا وقتی start زدم از ادامش شروع کنه! مثلاً دور 7 ام حلقه ی بیرونی و دور 200ام حلقه ی داخلی... ممنون

سلام.
برای اینکار، یک Thread دیگه ایجاد می کنید و این Loop ها رو در اون Thread اجرا میکنید. هر وقت شرط Stop شدن برقرار بود، با استفاده از یک ManualResetEvent اون Thread رو متوقف میکنید. سپس هر وقت کلید مورد نظر برای ادامه کار زده شد (در Main Thread)، کافی هستش تا Event فوق رو Signal کنید تا حلقه از حالت Wait خارج بشه و به کارش ادامه بده.

موفق باشید.

پاورقی: استفاده از Loop برای نگهداشتن اجرای حلقه (بجای Synchronization Object ها) تاثیر بسیار بدی روی Performance برنامه خواهد داشت و اصلا کار درستی نیست. با اینحال، اگر بفرمایید هدف اصلی از انجام اینکار چی هستش شاید بتونم Solution دیگه ای بدون نیاز به Thread ها بهتون پیشنهاد بدم.

aapalireza
شنبه 22 آبان 1389, 20:09 عصر
سلام.
برای اینکار، یک Thread دیگه ایجاد می کنید و این Loop ها رو در اون Thread اجرا میکنید. هر وقت شرط Stop شدن برقرار بود، با استفاده از یک ManualResetEvent اون Thread رو متوقف میکنید. سپس هر وقت کلید مورد نظر برای ادامه کار زده شد (در Main Thread)، کافی هستش تا Event فوق رو Signal کنید تا حلقه از حالت Wait خارج بشه و به کارش ادامه بده.


ممنون
ولی اصلاً نفهمیدم!
با اینایی که گفتید تا حالا کار نکردم!
لطفاً راهنمایی بیشتر...

من دو listbox دارم, این در دو حلقه‌ی تو درتو صدا می‌شوند,
به این صرت که عنصر اول listbox اول با همه ی عناصر لیست باکس دوم و عنصر دوم با همه‌ی عنصر های لیست باکس 2 و الی آخر - این ها قسمتی از urlهایی را تشکیل میدهند که به صورت request با httprequest و httpresponse فرستاده می‌شود...

mahdi87_gh
شنبه 22 آبان 1389, 21:52 عصر
دوست عزیز جواب سوال جناب آقای موسوی بهترین روشه
اما برای افرادی که مثل من یکم کم حرفه این(:لبخند:) یکم سخته.
میتونی متغیرهایی درون حلقه تعریف شده رو بصورت Member Variable فرم تعریف کنی و از یک تایمر برای اجرای حلقه بهره بگیری. با زدن دکمه stop بیا و timer رو enabled=false کن
موفق باشی

aapalireza
شنبه 22 آبان 1389, 22:22 عصر
وایییی!:اشتباه:
از خودم نا امید شدم:ناراحت:
من کم فهمم یا سطح شما خیلی بالا است!!
من نمی دونم Member Variable چیه! وای بر من:افسرده:


آقایون سطح بالا! لطفاً دست مرا بگیرید و یکم مرا بالا بکشید!
لطفاً یا توضیح بدید که Member Variable چیه یا یک نمونه بدید دانلود کنم تا کدشو بخونم...
ممنون

mahdi87_gh
شنبه 22 آبان 1389, 22:36 عصر
متغیرهای حلقه( مثلا i و j ) رو درون تعریف کلاس Form قرار بده تا بصورت Global برای همه توابع موجود، قابل دسترسی باشند.

namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
int i, j;

aapalireza
شنبه 22 آبان 1389, 23:13 عصر
متغیرهای حلقه( مثلا i و j ) رو درون تعریف کلاس Form قرار بده تا بصورت Global برای همه توابع موجود، قابل دسترسی باشند.

namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
int i, j;

اگر اشتباه نکنم منظورتان این است که کلاً for حلقه را بردارم و تو تایمر بنویسم...!
ممنون,راه جالبی بود, خیلی جاها به درد میخوره:متفکر:
من این کار را کردم,
خیلی سرعت برنامه را پایین میآورد!
من تایمر را 1میلی ثاتیه تعریف کردم,
برای مثال دو تکست باکس را در نظر بگیرید که اعداد 0 تا 99999 را درونش نمایش میدهیم(هربار یکی اضافه میشه)
تفاوت سرعت خیلی زیاده!
باز هم ممنون
اگر راه دیگر است بگویید یا راه اول را تشریح فرمائید...

bade saba
یک شنبه 23 آبان 1389, 00:58 صبح
این پروژه رو یه نگاه بنداز خیلی فوق العاده نیست اما کارت رو راه میندازه
چیز سختی توش نیست اما اگر مشکلی بود بگو توضیح بدم



پ. ن. : وجود textBox و timer و متغییر k در برنامه فقط برای دیدن روند حرکتی برنامه هست و ربطی به منطق برنامه نداره و شما میتونی حذفش کنی

موفق باشید

bade saba
یک شنبه 23 آبان 1389, 21:37 عصر
نوشته شده توسط arefba
خوب می تونی توی قسمت جستجوی پیشرفته سایت با وارد کرد نام کاربری من و جستجوی ترد به فیلم آموزشی و کلا چی بودن ترد برسی

توصیه میکنم به حرفش گوش کنی و پستهایی که گذاشته رو یه جستجو بکنی ، من فیلمها رو دانلود کردم و دیدم ، فیلم آموزشی که در پست های این دوستمون هست مبحث thread رو خیلی خوب توضیح داده

موفق باشید