PDA

View Full Version : سورس يك كرنومتر ساده را با ويژوال بيسيك مي خوام ؟



a_m_i_n_000
شنبه 21 دی 1387, 09:51 صبح
سورس يك كرنومتر ساده را با ويژوال بيسيك مي خام ؟


اگه داشتين وتسه دانلود بزارين .


مرسي .

ƒxmahdi
شنبه 21 دی 1387, 12:58 عصر
Download Stopwatch

Pr0grammer
شنبه 21 دی 1387, 15:14 عصر
Download Stopwatch


این سورسی که قرار دادید؛ گمون نمی کنم صحیح باشه......
برای اثباتش؛ این نمونه رو ببینید :
http://pr0grammer.persiangig.com/sample/stopwatch.zip

ƒxmahdi
شنبه 21 دی 1387, 15:47 عصر
این سورسی که قرار دادید؛ گمون نمی کنم صحیح باشه......
اول اینکه تا مطمئن نشدید پارازیت ندین!
دوم ارزش یک کرنومتر به محاسبه گر صدم ثانیه اش است و شما اومدین یه تامیر به برنامه اضافه کردین.
سورس برنامه ای که من قرار دادم هیچ مشکلی نداره مطمئن باشید.

Pr0grammer
شنبه 21 دی 1387, 17:06 عصر
اول اینکه تا مطمئن نشدید پارازیت ندین!
دوم ارزش یک کرنومتر به محاسبه گر صدم ثانیه اش است و شما اومدین یه تامیر به برنامه اضافه کردین.
برنامه ای که من قرار دادم هیچ مشکلی نداره مطمئن باشید.

آفرین؛ حق باشماست....
از نوع برخوردتون معلومه خیلی می فهمید....

a_m_i_n_000 ، من به شما عرض می کنم :
برنامه ای که قرار دادم رو دانلود و اجرا کنید و دکمه start رو بزنید؛ چند لحظه صبر کنید؛ حالا تفاوت ثانیه ها رو چک کنید.....

سوالی که اینجا پیش میاد اینه که : یا تایمر من تند کار می کنه یا تایمر این آقا کند کار می کنه!
که ایشون فرمودند که مطمئن هستند.... پس با اون کاری نداریم و سراغ تایمر خودمون میریم....

a_m_i_n_000 جان، حالا لطف کن، ساعت ویندوز رو باز کن؛ اون که درسته؟! ببین هر بار که عقربه ی ثانیه ش حرکت میکنه، اون تایمر من هم به موقع حرکت میکنه؟! من که دیدم هر دو با یه سرعت حرکت می کنن.....

جالب اینجاست که من از چه چیزی باید مطمئن میشدم که نشدم و اومدم پارزیت دادم؟!

راستی a_m_i_n_000 جان من اصلاً اون چیزی که به برنامه ی این آقا اضافه کردم ربطی به موضوع شما نداشتا؛ جواب سوال شما نبود؛ چون متاسفانه من نمی دونم؛ فقط می خواستم دوستان فکر نکنن بنده الکی به برنامه کسی گیر دادم!

در ضمن بد نیست به این جمله دکتر شریعتی یه نگاهی بندازید :
ای خدای بزرگ به من کمک کن تا وقتی می خواهم درباره ی راه رفتن کسی قضاوت کنم, کمی با کفش های او راه بروم...

موفق باشید

xxxxx_xxxxx
شنبه 21 دی 1387, 17:25 عصر
برنامه اي كه تو پست دوم بود با اولين نگاه هم مشخص بود كه دقيق كار نمي كنه.
-------
براي درست كردن يه كورنمتر از دستور timer استفاده كنيد. دقت كنيد تنها كلمه Timer نه شي تايمر.
مقداري كه بر ميگرداند مدت زماني است كه Bios سيستم شروع به فعاليت كرده. آن هم به ميلي ثانيه.
پس ديگه نسبت به دقيق بودنش هيچ شكي نيست.

موفق باشيد/

ƒxmahdi
شنبه 21 دی 1387, 20:11 عصر
نوشته شده توسط Pr0grammer
این سورسی که قرار دادید؛ گمون نمی کنم صحیح باشه......

شما بهتره تفره نروید و مشکل سورس را بگید تا هم من بفهمم مشکل کجاست و مشکل دوستمون حل بشه!
غیر از اینه که هر 100 صدم ثانیه یک ثانیه است و هر 60 ثانیه 1 دقیقه
دقیقا همین در برنامه اجراء شده. اگر هر در مواردی مشکل پیش بیاد مربوط به شیء تایمره نه سورس برنامه!


برنامه اي كه تو پست دوم بود با اولين نگاه هم مشخص بود كه دقيق كار نمي كنه.

جناب xxxxx_xxxxx مشکل کجاست؟ مشکل مربوط به سورسه یا چیز دیگه!

xxxxx_xxxxx
دوشنبه 21 بهمن 1387, 08:49 صبح
جناب xxxxx_xxxxx مشکل کجاست؟ مشکل مربوط به سورسه یا چیز دیگه!

بالاخره به از مدتي وقت كردم پاسخ اين دوستمونو بدم.
بايد خدمتتون عرض كنم كه دقيقاً مشكل از سورسه.

هميشه كه مشكل برنامه ها همراه با Error نيست.
درسته كه interval تايمر 10 هست ولي اين دليل نميشه كه تا آخرين دستورش دقيقاً همه تو يك ميلي ثانيه اجرا بشه كه قراره دقيقاً ده ملي ثانيه ديگه اين دستورات دوباره تكرار بشن. پس زمان لازم براي اجراي دستورات چي ميشن؟ اگرچه زمان اجراي دستورات بسيار ناچيز هست ولي در اين جور مواقع يك ميلي ثانيه هم يك ميلي ثانيه است. من فكر مي كنم كه بيشترين زمان صرف انتقال اعداد به ليبل ميشه.

به هرحال.
همونطور كه تو پست قبلي گفتم بهترين راه و دقيقترين راه استفاده از تايمر هست. منظور همون تايمري كه تو پست قبل گفتم. اگر شما از اون استفاده كنيد محاله كه ذره اي تاخير تو كار برنامه به وجود بياد، منظورم خروجي برنامه هست.
حالا شما برنامه اي كه ضميمه كردم رو اجرا كنيد ببينيد به چه صورت عمل مي كنه. چه شما interval تايمر رو 1 قرار بديد چه 10 چه 100 باز هم زمانش با سرعت طبيعي طي ميشه. فقط بايد چندتا if بگذاريد تا عدد مربوط به ثانيه منفي نشه و به موقع صفر بشه و ...
هدف نشون دادن دقت در زمان هست.

موفق باشيد/

meys34
دوشنبه 21 بهمن 1387, 10:11 صبح
خوشبختانه مشكل كند يا تند بودن تايمر ها حل شد( هر چند بي ايراد نيست ) حالا ميخام ببينم ميشه يه پروژه اي رو بدون فرم باز كرد (فقط يه ماژول داشته باشه ) كه مثلا هر 10 ثانيه يه Msgbox رو نشون بده؟

xxxxx_xxxxx
دوشنبه 21 بهمن 1387, 10:24 صبح
Public Sub main()
x1: If Timer Mod 10 = 0 Then MsgBox "Hello"
DoEvents
GoTo x1
End Sub


البته با تابع SetTimer هم ميشه اين كارو كرد(API)



هر چند بي ايراد نيست

ايراد از لحاظ زماني كه نداره. داره؟

meys34
چهارشنبه 23 بهمن 1387, 12:08 عصر
Public Sub main()
x1: If Timer Mod 10 = 0 Then MsgBox "Hello"
DoEvents
GoTo x1
End Sub


روش ديگه اي وجود نداره؟ آخه استفاده از اين حلقه پروسس رو خيلي (نزديك 100% از CPU)مشغول ميكنه:عصبانی:



ايراد از لحاظ زماني كه نداره. داره؟
نه همونطور كه تو پست قبل گفتم مشكل زماني نداره:تشویق:

meys34
سه شنبه 29 بهمن 1387, 12:01 عصر
هي كسي بلد نيست؟!!!!!!!!!!!!!!!

xxxxx_xxxxx
سه شنبه 29 بهمن 1387, 20:33 عصر
يه راه ديگه اش اينه كه از تايمر استفاده كنيم.
اينبار منظورم نه Timer هست و نه شي Timer، بلكه تابع API به نام SetTimer
اين طوري cpu هم درگير نميشه.

meys34
پنج شنبه 01 اسفند 1387, 23:01 عصر
يه راه ديگه اش اينه كه از تايمر استفاده كنيم.
اينبار منظورم نه Timer هست و نه شي Timer، بلكه تابع API به نام SetTimer
اين طوري cpu هم درگير نميشه.
مشكل دقيقا همينجاست :افسرده:ميشه يه برنامه بنويسيد كه از SetTimer استفاده كنه ولي هيچ فرمي نداشته باشه(منظورم يه چيزي مثل برنامه ي زير هست كه قبلا نوشته بوديد و فقط يه ماژول داشت (و ديگر هيچ))



Public Sub main()
x1: If Timer Mod 10 = 0 Then MsgBox "Hello"
DoEvents
GoTo x1
End Sub

xxxxx_xxxxx
جمعه 02 اسفند 1387, 03:20 صبح
اي بابا، بي خيال ديگه دوست عزيز. شبيه تايمر شديم:افسرده:
شما هم اينا رو كپي كنيد تو يك ماژول و ديگر هيچ (البته زحمت زدن دكمه F5 با شماست).


Private Declare Function SetTimer Lib "user32.dll" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Public Sub Main()
SetTimer 0, 0, 10000, AddressOf MyTimer
While True
DoEvents
Wend
End Sub

Private Sub MyTimer()
MsgBox "Good Bye!"
End Sub
CPU هم درگير نميشه.
اون حلقه اي كه ميبينيد وظيفه داره برنامه رو سرپا نگه داره تا به اتمام نرسه، چون اگه برنامه تموم شه تايمر هم اصطلاحاً kill ميشه. چون تايمر داره تحت برنامه ما كار مي كنه ولي مستقل. - - - - چي شد!! تحت برنامه ولي مستقل!!!!. تحت برنامه از اين نظر كه شناسه اي كه به تايمر داده ميشه از طرف برنامه ماست پس اگه برنامه تموم شه تايمر هم kill ميشه. ولي مستقل از اين لحاظ كه برنامه ما هيچ وظيفه اي نسبت بلايايي كه ممكنه سر تايمر بياد نداره، چون كنترل تايمر مستقيماً به سيستم عامل داده ميشه.
اينا رو گفتم تا وجود اون حلقه رو توجيه كرده باشم.
حالا اگه اون حلقه همچين غير طبيعي هست شما مي تونيد از تابع Sleep استفاده كنيد كه ثوابش هم بيشتره چرا كه cpu هم كار كمتري انجام ميده و تو يه حلقه به دنبال نخود سياه نمي گرده:چشمک: