PDA

View Full Version : دستور دیگری بجای Sleep ?



H_r_m
دوشنبه 06 مهر 1383, 21:54 عصر
سلام
بچه ها به جای تابع Sleep دستور دیگری برای وقفه سراغ ندارید :?:
اخه Sleep وقتی وقفه میده تمام برنامه قفل میشه :-x
من فقط میخام تو یه شمارش یه وقفه بدم و دوباره شرع کنم طوریکه کاربر بتونه از بقیه برنامه استفاده کنه :roll:

بابک زواری
دوشنبه 06 مهر 1383, 23:22 عصر
میتونی یک حلقه بسازی و در ابتدا قبل از حلقه زمان سیستم رو بدست بیاری
بعد درون حلقه تا زمانی بچرخی که زمان سیستم منهای زمان ابتدا کوچکتر از
زمان دلخواه ایست میباشد و در غیز اینصورت از حلقه خارج بشی

H_r_m
سه شنبه 07 مهر 1383, 11:14 صبح
سلام
کدنویس جان میشه یه کم توضیح بدین :?:
من میخام که تو یه لیبل یه چیزایی بنویسم و وقتی که به عدد یا کلمه مورد نظر رسید یه 2 ثانیه ای اونو نشون بده و دوباره ادامه پیدا کنه و من برا اینکار از یه شرط و یه Sleep استفاده کردم که نشد :oops:

SalarSoft
سه شنبه 07 مهر 1383, 12:39 عصر
میتونی یک حلقه بسازی و در ابتدا قبل از حلقه زمان سیستم رو بدست بیاری
بعد درون حلقه تا زمانی بچرخی که زمان سیستم منهای زمان ابتدا کوچکتر از
زمان دلخواه ایست میباشد و در غیز اینصورت از حلقه خارج بشی

راه درستیه ولی برای اینکه برنامه متوقف نشه باید تو داخل حلقه از عبارت زیر استفاده کنید:

Application.ProcessMessages

MM_Mofidi
سه شنبه 07 مهر 1383, 12:53 عصر
جان میشه در مورد Application.ProcessMessages بیشتر توضیح بدی؟ SalarSoft

ساران سافت
سه شنبه 07 مهر 1383, 13:00 عصر
فکر کنم منظورش همون Doevent باشه :roll:

H_r_m
سه شنبه 07 مهر 1383, 16:31 عصر
اره اگه میشه یه کم توضیح بده که کارش چیه

بابک زواری
سه شنبه 07 مهر 1383, 22:37 عصر
با همون حلقه کاملا به جواب میرسی اصلا این یک روشی است که در خیلی از
مواقع برای اندازه گیری زمان پردازش های مختلف و مقایسه آنها استفاده میشه

H_r_m
چهارشنبه 08 مهر 1383, 20:23 عصر
سلام
شرمنده میشه یه مثال بزارید :oops:
اخه من هر کار کردم باز برنامه قفل میشه :o

روانشناس
پنج شنبه 09 مهر 1383, 13:16 عصر
بابا از Timer استفاده کن.
ضمنا Application.ProcessMessage مربوط به .NET است نه VB6

H_r_m
پنج شنبه 09 مهر 1383, 14:01 عصر
سلام
من تو برنامه ام از تایمر زیاد استفاده کردم و به همین خاطر بعد ار Exe کردنش سرعت بقیه برنامه ها رو هم پایین میاره :evil:
بله حق با شما بود چون دستور Application.ProcessMessage تو وی بی جواب نمی داد :shock: :تشویق:
میشه یکی یه راهنمایی کنه تا بعد از استفاده از تایمر ها سرعت کم نشه :گیج:

H_r_m
شنبه 11 مهر 1383, 14:40 عصر
:متفکر: :متفکر: :متفکر: :roll:

حامد مصافی
یک شنبه 12 مهر 1383, 01:40 صبح
باید از حلقه ها استفاده کنی ولی برای این که اجرای متعدد حلقه برنامه رو به حالت تعلیق نبره باید با دستور DoEvents حلقه رو گسسته کنی
یه مثال میزنم
برنامه زیر در اثر کلیک کردن یه دکمه بعد از 10 ثانیه یک کادر محاوره ای نمایش میده

Private Sub Command1_Click()
Dim t as date
t = Time
Do
DoEvents
Loop While DateAdd("s", 10, t) > Time
MsgBox "After 10 seconds"
End Sub

البته این کد فقط جنبه آموزشی داره
اگه 10 ثانیه زیاده تو خط ششم یه عدد دیگه بنویس

H_r_m
یک شنبه 12 مهر 1383, 09:06 صبح
سلام
ممنونم :kiss: :kiss: :kiss:

vbprogramer
یک شنبه 12 مهر 1383, 10:31 صبح
آقا از doevents برای چی استفاده کردین؟
بدون آن هم که کار میکنه :متفکر:

H_r_m
یک شنبه 12 مهر 1383, 14:37 عصر
آقا از doevents برای چی استفاده کردین؟
بدون آن هم که کار میکنه :متفکر:

سلام
من که کارم راه افتاد میشه شما هم مثال خودتون رو بزارید

vbprogramer
یک شنبه 12 مهر 1383, 19:20 عصر
حمید جان من توی همون برنامه گفتم
فقط میخواهم بدونم خاصیت doevent چیه و برای چی استفاده میشه؟

H_r_m
یک شنبه 12 مهر 1383, 22:48 عصر
سلام
vbprogramer عزیز این دستور باعث میشه که تو حلقه برنامه قفل نکنه (همون مشکل من) :|

بابک زواری
یک شنبه 12 مهر 1383, 23:13 عصر
نیازی به doevents نیست و در بعضی مواقع همین مسئله باعث هنگ کردن میشه
( نه همیشه در حالت خاص )‌ به همین خاطر اگر استفاده نکنی بهتره اگر هم استفاده
کردی که نوش جونت :wink:

H_r_m
دوشنبه 13 مهر 1383, 09:04 صبح
سلام
کدنویس عزیز میشه اون حالات خاص رو بگید در ضمن من بدون Do Event نوشتم ولی برنامه ام قفل میکرد :-x
میشه شما یک مثال بدون Do Event بگید :متفکر:

بابک زواری
دوشنبه 13 مهر 1383, 11:57 صبح
شما همین کد رو بدون doevents بکار ببر ببین بازم هنگ میکنه
یه توضیحی هم راجع به برنامه ات بده ببینم مشکل کجاست

H_r_m
دوشنبه 13 مهر 1383, 13:32 عصر
اره هنگ میکنه
من یه لیبل دارم که توش هم متن و هم عدد هست
من میخام وقتی عدد نمایش داده میشه چند ثانیه مکث کنه و بعد ادامه بده
من اینو تو یه تایمر گذاشتم و چون Interval تایمرم از 1 ثانیه کمتر بود نمیتونستم از خود تایمر استفاده کنم
در ضمن من نمیخوام از چند تا تایمر استفاده کنم چون سرعت رو پایین میارن :evil:

Hossein Bazyan
دوشنبه 27 مهر 1383, 00:53 صبح
دوستان عزیزی که کار DoEvent را برسیده بودند . اگر برنامه شما در حال اجرا باشد و مثلا به یک حلقه برسد ویندوز تقریبا کارهای دیگرش( منظور برنامه های دیگری که در حال اجرا هستند ) را ول نموده و حلقه شما را اجرا میکند برای اینکه ویندوز به برنامه های دیگر هم برسد اگر به این دستور رسید موقتا از کنترل را از برنامه در حال اجرا گرفته و به برنامه های دیگر میرسد و سبس کنترل را به برنامه ما میفرستد یعنی از این دستور استفاده میشود :ه ویندوز بتواند به برنامه های در حال اجرای دیگر نیز رسیدگی کند .

H_r_m
دوشنبه 27 مهر 1383, 10:05 صبح
:تشویق: :تشویق: :تشویق:

حامد مصافی
چهارشنبه 29 مهر 1383, 17:02 عصر
اگر برنامه شما در حال اجرا باشد و مثلا به یک حلقه برسد ویندوز تقریبا کارهای دیگرش( منظور برنامه های دیگری که در حال اجرا هستند ) را ول نموده و حلقه شما را اجرا میکند برای اینکه ویندوز به برنامه های دیگر هم برسد اگر به این دستور رسید موقتا از کنترل را از برنامه در حال اجرا گرفته و به برنامه های دیگر میرسد و سبس کنترل را به برنامه ما میفرستد یعنی از این دستور استفاده میشود :ه ویندوز بتواند به برنامه های در حال اجرای دیگر نیز رسیدگی کند .

در واقع این دستور به ویژوال بیسیک ( نه ویندوز ) اعلام می کند که برنامه را در محل برخورد به این دستور متوقف کرده و به رویداد های دیگر صف پیام که ویندوز به سوی برنامه ارسال کرده پاسخ دهد