PDA

View Full Version : چطور استفاده کنم از دستور sleep



xrezax
شنبه 30 مهر 1390, 01:20 صبح
دوستان چطور از sleep استفاده کنم. ممنون میشم سورس بزارید :قلب:

محسن واژدی
شنبه 30 مهر 1390, 01:39 صبح
سلام
برای ایجاد کردن وقفه مقدار زمانی مورد نظر را بر حسب میلی ثانیه در جلوی آن بنویسید، یعنی بصورت:

Sleep 1000 '1000: 1s


موفق باشید

arash020
شنبه 30 مهر 1390, 01:40 صبح
سلام
فرمودین نمونه کد :

mr-adler
سه شنبه 10 آبان 1390, 01:07 صبح
سلام
کاربرد دستور sleep در کجاست؟ اون طور که من خوندم و امتحان کردم فقط باعث ایست(یا به نظرم) هنگ کردن موس و کیبورد + ویندوز میشه.
کجاها کاربرد داره؟

ممنونم

M.T.P
سه شنبه 10 آبان 1390, 01:38 صبح
سلام
کاربرد دستور sleep در کجاست؟ اون طور که من خوندم و امتحان کردم فقط باعث ایست(یا به نظرم) هنگ کردن موس و کیبورد + ویندوز میشه.
کجاها کاربرد داره؟

ممنونم

روتین Sleep برنامه جاری (برنامه ای که Sleep را صدا میزند) را برای مدت زمان معلوم فریز می کند ، یعنی هیچ کدی از نرم افزار اجرا نمیشه حتی کد تایمرها.
با موس و کیبورد و برنامه های دیگه کاری نداره.

کاربرد: بسته به نیاز و ماهیت نرم افزار گاهی اوقات لازم میشه نرم افزار رو تا یک مدت زمان دلخواه فریز کنید مثلا شما در نرم افزارتون کدی رو گذاشتید که Microsoft Word رو اجرا میکنه و می خواهید مدت زمانی رو برای Loading اون در نظر بگیرید و ...

butterfly8528
سه شنبه 10 آبان 1390, 02:07 صبح
سلام .

روتین Sleep برنامه جاری (برنامه ای که Sleep را صدا میزند) را برای مدت زمان معلوم فریز می کند ، یعنی هیچ کدی از نرم افزار اجرا نمیشه حتی کد تایمرها.
دوست عزیز کار تابع sleep ، به حالت تعلیق در آوردن یک Thread تا بازه زمانی مشخصی (پارامتر ورودی تابع بر حسب میلی ثانیه) هست ، حالا در VB6 چون معمولا کل برنامه دارای فقط یک Thread هست ( Thread اصلی برنامه که تمام کد های برنامه تحت این Thread اجرا می شوند ) ، در صورت استفاده از تابع Sleep کل برنامه شما تا مدت زمان مشخص شده به حالت تعلیق در می آید که کاربر فکر می کنه برنامه فریز شده !
موفق باشید :لبخندساده:.

mr-adler
سه شنبه 10 آبان 1390, 02:24 صبح
ممنونم که راهنماییم کردید دوستان...
فقط شاید بنظر برسه این سوالم مربوط به این تاپیک نیست اما مربوط میشه:
77279
فرم اکتیو که دورنش این کد رو نوشتیم چه تفاوتی با فرم لود داره؟
دستور do event کارش چیه در این مورد؟

مچکرم..http://barnamenevis.org/images/misc/pencil.png

butterfly8528
سه شنبه 10 آبان 1390, 02:42 صبح
با اینکه سوال ها ربطی به این تاپیک نداشت جوایتون رو میدم . اما لطفا قوانین رو رعایت کنید !


فرم اکتیو که دورنش این کد رو نوشتیم چه تفاوتی با فرم لود داره؟




Form_Load fires after Form_Initialize as the visual elements of the form are being created and default values are being assigned to properties. Normally, you should avoid doing anything that will draw something on the form because that causes an automatic firing of the next event. It might be tempting to call Show in Form_Load and then do further processing with the visible form, but you’re usually better off doing this in the next event.


Form_Activate fires after you have loaded and shown the form. It’s possible to load a form without showing it; in this case, Form_Activate isn’t fired until you call the Show method. Form_Activate is also called when you switch from one modeless form to another, or when you switch between MDI forms (but not when you return focus from
another application). If your application has modeless or MDI forms, don’t do anything in Form_Activate that you want to happen only once. Or use a static variable (such as fNotFirst) to protect against multiple initializations in Form_Activate.


دستور do event کارش چیه در این مورد؟


Yields execution so that the operating system can process other events.

Remarks

The DoEvents function returns anInteger representing the number of open forms in stand-alone versions of Visual Basic, such as Visual Basic, Professional Edition. DoEvents returns zero in all other applications.

DoEvents passes control to the operating system. Control is returned after the operating system has finished processing the events in its queue and all keys in the SendKeys queue have been sent.

DoEvents is most useful for simple things like allowing a user to cancel a process after it has started, for example a search for a file. For long-running processes, yielding the processor is better accomplished by using a Timer or delegating the task to an ActiveX EXE component.. In the latter case, the task can continue completely independent of your application, and the operating system takes case of multitasking and time slicing.

Caution Any time you temporarily yield the processor within an event procedure, make sure theprocedure is not executed again from a different part of your code before the first call returns; this could cause unpredictable results. In addition, do not use DoEvents if other applications could possibly interact with your procedure in unforeseen ways during the time you have yielded control.


منبع MSDN .

M.T.P
سه شنبه 10 آبان 1390, 12:37 عصر
در صورت استفاده از تابع Sleep کل برنامه شما تا مدت زمان مشخص شده به حالت تعلیق در می آید که کاربر فکر می کنه برنامه فریز شده !
به تعلیق دراومدن برنامه با فریز شدن چه فرقی با هم دارن؟ :لبخند:

دوست عزیز کار تابع sleep ، به حالت تعلیق در آوردن یک Thread تا بازه زمانی مشخصی (پارامتر ورودی تابع بر حسب میلی ثانیه) هست
دوست من Sleep تابع نیست ، شاید منظورتون SleepEx باشه ...

just4froum
سه شنبه 10 آبان 1390, 17:05 عصر
دوست من Sleep تابع نیست ، شاید منظورتون SleepEx باشه ...

دوست عزيز هر جفتشون تابع api هستند :



Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Declare Function SleepEx Lib "kernel32" Alias "SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long

M.T.P
سه شنبه 10 آبان 1390, 17:24 عصر
دوست عزيز هر جفتشون تابع api هستند :

نه خیر Sleep تابع نیست. اما SleepEx چرا...

تابع قاعده ای است که ورودیهایی را دریافت و خروجی را به ما پس می دهد ، در مبحث برنامه نویسی توابع ممکمن است مقدار ورودی نداشته باشند.

mr-adler
سه شنبه 10 آبان 1390, 17:29 عصر
سلام ببخشید دخالت میکنم.
بهتر نیست به جای گیر دادن به نوع یک دستور بشینیم راجع به اون بحث کنیم. که حداقل 2 تا نکته مفید یاد بگیریم. خوب sleep تابع باشه یا نباشه هیچ مهم نیست . مهم اینه که بدونی چه کاری انجام میده و کجا باید استفاده بشه.

به هر حال هر جور صلاح میدونید.....:متفکر:

just4froum
سه شنبه 10 آبان 1390, 17:56 عصر
نه خیر Sleep تابع نیست. اما SleepEx چرا...

تابع قاعده ای است که ورودیهایی را دریافت و خروجی را به ما پس می دهد ، در مبحث برنامه نویسی توابع ممکمن است مقدار ورودی نداشته باشند.

درسته !!!
حالا شما ببخشيد Function نيست Sub است
من فكر كردم شما با اين تابع ببخشيد با اين سابروتين آشنايي نداريد

M.T.P
سه شنبه 10 آبان 1390, 18:22 عصر
درسته !!!
حالا شما ببخشيد Function نيست Sub است
من فكر كردم شما با اين تابع ببخشيد با اين سابروتين آشنايي نداريد
؟!!؟ :متفکر: :اشتباه:
البته یکی از معانی Sub هم تابع است منتها معادلش تو خانواده C فکر کنم Void باشه.

butterfly8528
سه شنبه 10 آبان 1390, 18:36 عصر
سلام دوست عزیز.

به تعلیق دراومدن برنامه با فریز شدن چه فرقی با هم دارن؟
عزیز جان در این مورد منظور بنده این بود که به دلیل اینکه اکثرا برنامه های VB6 تحت یک Thread اجرا می شوند کل برنامه شما به حالت تعلیق در می آید ( یعنی این مشکل به خاطر تابع Sleep نیست بلکه به خاطر فرا خوانی این تابع در Thread اصلی برنامه هست ! ) .


دوست من Sleep تابع نیست ، شاید منظورتون SleepEx باشه ...

نه خیر Sleep تابع نیست. اما SleepEx چرا...

تابع قاعده ای است که ورودیهایی را دریافت و خروجی را به ما پس می دهد ، در مبحث برنامه نویسی توابع ممکمن است مقدار ورودی نداشته باشند.
برادر عزیز Function همانطور که از نامش پیداست،یعنی تابع ! یعنی هر SUB ،Function یا... که مطیع برنامه اصلی باشد ! بحث ورودی و خروجی هم سر جای خود .

http://up6.iranblog.com/images/ej6e3lelbd0ax9ep79eg.gif

http://up6.iranblog.com/images/iu8tu66rvwnk8z44yz4v.gif



اطلاعات بیشتر در مورد توابع Sleep و SleepEx توسط MSDN :
Sleep Function (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx)
SleepEx Function (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686307(v=vs.85).aspx)

موفق و پیروز باشید :لبخندساده:.

M.T.P
چهارشنبه 11 آبان 1390, 00:53 صبح
دوستان بحث کل کل کردن و این حرفا نیست.
چرا که این بحث ها به جای اینکه این دوستمون رو به نتیجه برسونه ، تاپیک رو شلوغ میکنه و نهایتا هیچ.
اما از نظر من سابروتین تابع نیست و نسبت دادن واژه تابع به آن هم به ضرر کسی تموم نمیشه و این اصلا به ماها ربطی نداره ، خلاصه سوء تفاهم شده و عذر بنده رو بپذیرید.
موفق باشید.

mr-adler
چهارشنبه 11 آبان 1390, 01:40 صبح
سلام
ممنونم
راستی از پست شماره 8 چیز زیادی متوجه نشدم. ولی اگه ممکنه بگید درست میگم یا نه و اگه یه جاهاییش ایراد داره لطفا اصلاح کنید:
زمانی روی ایکن برنامه کلیک میکنیم ابتدا رویداد Form_Initialize اجرا میشه.اگه اشتباه نکنم Initialize یعنی تشخیص(به دیکشنری نگاه نکردما:لبخند:) یعنی تشخیص میده برنامه چه پیش نیازهایی میخواد برای اجرا.در واقع هنوز برنامه اجرا نشده پس فعلا نباید از دستوری مثل print استفاده کرد.
بعد از تشخیص نیاز ها رویداد فرم لود اجرا میشه یعنی کدهای نوشته شده توسط ما را لود میکنه.
در اخر Form_Activate زمانی روی میده که فرممون show بشه. یعنی زمانی که فرممون نشون داده شده.

دوستان خواهشمندم دقیق مطالعه کنید چند خط بنده رو و اگه کوچکترین ایرادی داره راهنماییم کنید.
ممنونم بسیار

محسن واژدی
چهارشنبه 11 آبان 1390, 07:49 صبح
سلام
ممنونم
راستی از پست شماره 8 چیز زیادی متوجه نشدم. ولی اگه ممکنه بگید درست میگم یا نه و اگه یه جاهاییش ایراد داره لطفا اصلاح کنید:
زمانی روی ایکن برنامه کلیک میکنیم ابتدا رویداد Form_Initialize اجرا میشه.اگه اشتباه نکنم Initialize یعنی تشخیص(به دیکشنری نگاه نکردما:لبخند:) یعنی تشخیص میده برنامه چه پیش نیازهایی میخواد برای اجرا.در واقع هنوز برنامه اجرا نشده پس فعلا نباید از دستوری مثل print استفاده کرد.
بعد از تشخیص نیاز ها رویداد فرم لود اجرا میشه یعنی کدهای نوشته شده توسط ما را لود میکنه.
در اخر Form_Activate زمانی روی میده که فرممون show بشه. یعنی زمانی که فرممون نشون داده شده.

دوستان خواهشمندم دقیق مطالعه کنید چند خط بنده رو و اگه کوچکترین ایرادی داره راهنماییم کنید.
ممنونم بسیار

سلام
بله همینطور است

موفق باشید

kitcat_m18
چهارشنبه 11 آبان 1390, 13:04 عصر
در اخر Form_Activate زمانی روی میده که فرممون show بشه. یعنی زمانی که فرممون نشون داده شده.

نه اينطور نيست، در حقيقت وقتي اين رويداد استفاده ميشه که فوکوس سيستم عامل روي برنامه شا قرار گرفته باشه. ساده تر بگم شما دو تا برنامه با وي بي بنويس و هر دو رو اجرا کن. بعد يه کد تو رويداد Active هر دو بزن وقتي که پنجره هر برنامه رو با موس کليک کني و يا با Alt+Tab روش قرار بگيري کد هاي توي رويداد فرم لود اجرا ميشن.
موفق باشي :لبخندساده:

mr-adler
چهارشنبه 11 آبان 1390, 14:02 عصر
در اخر Form_Activate زمانی روی میده که فرممون show بشه. یعنی زمانی که فرممون نشون داده شده.

نه اينطور نيست،
این جمله اشتباه نیست . در حقیقت شما قسمت بعدی این جمله رو گفتید:
در اخر Form_Activate زمانی روی میده که فرممون show بشه. یعنی زمانی که فرممون نشون داده شده. و در ضمن زمانی که فوکوس رفته شده از فرم دوباره ب فرم بازگرده...

به هر حال ممنونم

محسن واژدی
چهارشنبه 11 آبان 1390, 14:08 عصر
نه اينطور نيست، در حقيقت وقتي اين رويداد استفاده ميشه که فوکوس سيستم عامل روي برنامه شا قرار گرفته باشه. ساده تر بگم شما دو تا برنامه با وي بي بنويس و هر دو رو اجرا کن. بعد يه کد تو رويداد Active هر دو بزن وقتي که پنجره هر برنامه رو با موس کليک کني و يا با Alt+Tab روش قرار بگيري کد هاي توي رويداد فرم لود اجرا ميشن.
بله، صحیح می فرمائید، البته همانطور که اطلاع دارید در زمانی که form برنامه ظاهر شود هم خاصیت activate (focus) اتفاق می افتد،

موفق باشید