PDA

View Full Version : سوال: sleepدر c#



cheshm
شنبه 07 آذر 1388, 23:08 عصر
ايا كدي مثل sleepدر دلفي در c#نيز وجود داره،چطوري ميتونم در برنامم(c#)
delay ايجاد كنم.

debugger
شنبه 07 آذر 1388, 23:25 عصر
System.Threading.Thread.Sleep(100);

voldemort1
یک شنبه 08 آذر 1388, 10:38 صبح
آیا کدی هست مشابه کد thread sleep که در اون هنگام فرم هنگ نکنه و مثلا به جای اینکه 5 ثانیه برنامه گیر کنه 5 ثانیه بعد از اجرای اون کد عملی که تعیین میکنیمو انجام بده ؟
مثلا به جای این کد :


System.Threading.Thread.Sleep(5000)

این کد


Run(5000 ,from now)
{
messagebox.show("hi");
}


کدی که بالا نوشتم کاملا شبه کده و تا به حال کدی مشابهش ندیدم ...
البته من همیشه این عملو با تایمر انجام میدم ولی زیاد جالب نمیشه ... صد البته زیبائی برنامه کاربرد برنامه بهتر از Sleep هست که به نظر میرسه برنامه ایراد داره ....
جمع بندی :آیا کدی جایگزین System.Threading.Thread.Sleep(5000 هست ؟

ASKaffash
یک شنبه 08 آذر 1388, 15:12 عصر
سلام
اینطوری :


DateTime Dt = DateTime.Now;
long Cnt = 0;
while ((DateTime.Now - Dt).TotalMilliseconds < 5000d)
this.Text = (++Cnt).ToString();

mehdi.mousavi
یک شنبه 08 آذر 1388, 16:44 عصر
سلام
اینطوری :


DateTime Dt = DateTime.Now;
long Cnt = 0;
while ((DateTime.Now - Dt).TotalMilliseconds < 5000d)
this.Text = (++Cnt).ToString();


سلام.
این کد CPU-Intensive هستش و هرگز توصیه نمیشه. در واقع ایشون باید کار زمانبرشون رو در یک Worker Thread انجام بدن، نه اینکه دنبال متوقف کردن Context در حال اجرا باشن، در حالیکه انتظار دارن Message Pump ویندوز کار کنه!

موفق باشید.

voldemort1
یک شنبه 08 آذر 1388, 17:33 عصر
سلام.
این کد CPU-Intensive هستش و هرگز توصیه نمیشه. در واقع ایشون باید کار زمانبرشون رو در یک Worker Thread انجام بدن، نه اینکه دنبال متوقف کردن Context در حال اجرا باشن، در حالیکه انتظار دارن Message Pump ویندوز کار کنه!

موفق باشید.

اگه لطف کنید و یه توضیح بدین ممنون میشم (در مورد Worker Thread البته ... )

mehdi.mousavi
یک شنبه 08 آذر 1388, 17:59 عصر
اگه لطف کنید و یه توضیح بدین ممنون میشم (در مورد Worker Thread البته ... )

لطفا به MSDN رجوع کنید. (http://msdn.microsoft.com/en-us/library/ms173178%28VS.80%29.aspx) اگر پس از مطالعه مطالب مزبور، بازهم سوالی براتون پیش اومد، در خدمتم. این مقوله اینقدر گسترده هستش که حقیقتا نمیتونم در یکی دو جمله اونو خلاصه کنم.

بهتون توصیه می کنم، برای آشنایی و البته، درست کار کردن با Thread ها، حتما کتابی تهیه کنید و بخونید و به پاسخهایی که (بعضا بصورت نادرست، یا ناقص) در این انجمنها داده میشه بسنده نکنید.

موفق باشید.

jas1387
یک شنبه 08 آذر 1388, 19:56 عصر
سلام




بهتون توصیه می کنم، برای آشنایی و البته، درست کار کردن با Thread ها، حتما کتابی تهیه کنید و بخونید

موفق باشید.

اگر لطف کنید و کتابی در این ضمینه معرفی کنید ممنون می شوم

ASKaffash
دوشنبه 09 آذر 1388, 08:55 صبح
سلام.
این کد CPU-Intensive هستش و هرگز توصیه نمیشه. در واقع ایشون باید کار زمانبرشون رو در یک Worker Thread انجام بدن، نه اینکه دنبال متوقف کردن Context در حال اجرا باشن، در حالیکه انتظار دارن Message Pump ویندوز کار کنه!

موفق باشید.
سلام
من براشون شبیه دستور را نوشتم و اصلا صورت مسئله را تغییر ندادم
کد این بود :


Run(5000 ,from now)
{
messagebox.show("hi");
}

mehdi.mousavi
دوشنبه 09 آذر 1388, 11:09 صبح
سلام من براشون شبیه دستور را نوشتم و اصلا صورت مسئله را تغییر ندادم

سلام.


You are not your code! در نتیجه وقتی کسی از کد شما ایراد میگیره، از شما ایراد نگرفته. از کد شما ایراد گرفته!
اگر به بیشتر سوالاتی که در این سایت مطرح میشه دقت کنید، عموما (برنامه نویسها!) میخوان مساله ای رو حل کنن که از راه کار اصلی اون مساله مطلع نیستن. افراد اولین و آخرین چیزی که میرسه به ذهنشون رو بعنوان تنها راه حل مساله در ذهن خودشون پرورش میدن، وقتی باور کردن که اون تنها راه حل مساله هستش اقدام به پیاده سازی میکنن. اما به مشکل بر میخورن و اونوقت یه Topic اینجا درست می کنن که "من میخوام فلان کار رو انجام بدم ولی...".... بعد از گفت و گوهای متوالی در نهایت به این نتیجه میرسیم که اصلا صورت مساله چیز دیگه ای بوده و نیازی به این "جینگولک" بازیها نیست. یکی از همین موارد استفاده از Thread هاست. اگر راهکار صحیح استفاده از Thread رو می طلبه، باید صورت مساله رو تغییر داد!!! نه اینکه در استفاده از Timer و ... پافشاری کنیم تا از Thread ها دوری کرده باشیم، یا "صورت مساله رو تغییر نداده باشیم". من می تونم مثالهای فراوانی بیارم که متاسفانه راه حلهای اصولی و سر راست، قربانی راه حل های دوزاری و (عموما) پیچیده شدن. اما واقعیت اینه که من مدتهاست که علاقه ام رو به پاسخ دادن به چنین تاپیکهایی از دست دادم...
اگر من صورت مساله رو تغییر نمیدادم، کدی که شما براشون نوشتید (و معادل شبه کدی هستش که خودشون نوشتن) فردا باعث میشد تا CPU Usage برای چند ثانیه به (مثلا) 100% برسه. اونوقت ایشون یه تاپیک دیگه یه جای دیگه ایجاد میکرد و میپرسید "من وقتی یکی از فرمهای برنامه ام رو باز می کنم، CPU Usage به سقف میچسبه و ..." و اونوقت 4 نفر دیگه سعی میکردن به اون مساله پاسخ بدن......... در نتیجه، این چرخه معیوب مدام تکرار میشد و ..... پس برخی اوقات، بهتره که صورت مساله رو تغییر بدیم تا متوجه بشیم که فرد سوال کننده در وهله اول چی مد نظرش بوده که الان به این سوالی رسیده که داره میپرسه.

امیدوارم متوجه منظورم شده باشید. موفق باشید.

پاورقی:
جناب jas1387، متاسفانه من در زمینه Threading در C#‎ کتابی ندیده ام و البته به دنبالش هم نبودم و کلیه کتابهایی که میشناسم به زبان C++‎ بر میگرده. فکر میکنم Amazon رو جستجو کنید، بتونید یکی دو کتاب در این زمینه پیدا کنید.

ASKaffash
دوشنبه 09 آذر 1388, 12:11 عصر
سلام
متاسفانه از یک تاپیک به جملات کوتاه خیلی نمی توان به نیاز درخواست کننده پی برد به احتمال 99% درخواست کننده مبتدی است چون به یک زبان قدیمی کدی را نوشته یا دیده و حال میخواهد عین آن کد را جانشین کند ولی در یک محیط و تفکر جدید .
حال به نظر من یک کد معادل دریافت کند و سپس در توضیحات و ادامه متوجه شود که در محیط کنونی روش مناسب و بهینه تری نیز وجود دارد اگر علاقه مند باشد ادامه میدهد در غیر اینصورت فقط مقطعی مشکلش را حل کرده .
بازهم از توضیح شما تشکر میکنم.