PDA

View Full Version : سوال: اینتروال کوچکتر از 1



m2011kh
یک شنبه 06 اسفند 1391, 13:39 عصر
سلام به همه دوستان و اساتید محترم.
میدونید که اینتروال تایمر رو وقتی رو 1 میزاریم برابر یک هزارم ثانیه هست.حالا سوالم اینه:

من تایمری لازم دارم که اینتروالش زیر 1 هزارم ثانیه باشه مثلا 1 میکرو ثانیه.اول اینکه اصلا چنین چیزی تو VB6 امکان داره.اگه داره چطوری؟؟؟

و یه سوال دیگه:

خیلیا ویندوز 8 رو دیدن و یا بهتر بگم گوشی های لمسی که میخوای یه چیزی که چند صفحه هست رو با لمس کردن حرکت بدید.در این صورت صفحه اول به صورت فریم نرمی حرکت میکنه و میره کنار و صفحه بعدی میاد.حالا اصل مطلب اینکه یه همچین چیزی رو میخوام تو برنامه ام پیاده کنم(حرکت نرم یک کنترل و رفتنش به کنار).

خوب ساده ترین کارش اینه که یه تایمر بزاریم و خاصیت Left کنترل رو هی زیاد یا کم کنیم تا یا بره سمت راست فرم بیا چپ.ولی در این صورت حرکت کنترل یه حالت خیلی خشکی داره و طبیعی نیست.میشه دوستان در این مورد یه راهنمایی کنن؟؟؟

منتظر راهنمایی هاتون هستم.

موفق و سربلند باشید.

MMD

SlowCode
یک شنبه 06 اسفند 1391, 14:26 عصر
سلام
در مورد اولی شاید با api بشه من خبر ندارم.
ولی واسه دومی باید یه متغیر تعریف کنی که رفته رفته کم بشه و اون رو باید به left کنترل اضافه کنی، اولش مثلا 100 هست تایمر به طور عادی هر مرحله مثلا 50 تا به left اضافه میکنه، این متغیر ما هم هر مرحله 10 تا کم میشه، اینطوری یه حالت انیمیشن درمیاد.مثلا:

Dim d As Byte

Private Sub cmdAnimate_Click()
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
d = 100
End Sub

Private Sub Timer1_Timer()
Left = Left + 50 + d
Refresh
If d > 10 Then d = d - 5 Else Timer1.Enabled = False
End Sub

البته اگه میخوای بهتر بشه یه بازه تعیرف کن مثلا اگه d یزرگتر از 50 باشه 5 تا ازش کم کن و اگه کمتر از 50 باشه 3 تا کم کن.

حمید محمودی
یک شنبه 06 اسفند 1391, 14:29 عصر
سلام،
امیدوارم لینک های زیر به شما کمک کنه؛

http://content.gpwiki.org/index.php/VB:Timers
http://www.programmersheaven.com/mb/VBasic/344346/344346/how-to-create-a-timer-with-less-than-1ms/

FastCode
پنج شنبه 10 اسفند 1391, 21:14 عصر
با تایمر نمیتونی این کار رو بکنی.خیلی مشکلات سر راهشه اولیش این که ویندوز به طور میانگین هر ۱۶ میلی ثانیه تایمر ها رو اجرا میکنه. و دومیش این که فرض کن یک پردازنده AMD BullDozer OctaCore با AVX داری
که توی هر Cycle یک Instruction اجرا میکنه.(اگر باشه ۶۰۰ میلیون پولشه)\
میشه
192KPixel/Second
و تقسیم بر مثلا ارتفاع frame که فرض میکنیم ۷۶۸ باشه
میشه ۲۵۰
یعنی اگر هیچ ذره ای از سرعت پردازنده رو از دست ندید و مستقیم در Video Buffer بنویسید که نمیتونید
حداکثر عرض frame میشه 250
با این اوصاف DirectX جواب منطقی ای به نظر میرسه.توی VB هم استفادش سادست.

setroyd
شنبه 12 اسفند 1391, 03:25 صبح
اینم یه timer سریع با api یادتون باشه هر کاری با api امکان پذیره فقط یکم وقت بزارید در میاد .


دوباره نوشتم فقط اگه مشکلی بود بگو بهت بگم چون 1 ساله برنامه نویسی نمیکنم و برنامه نویسی هم کمی فراره اگه مشکلی بود بگو

FastCode
شنبه 12 اسفند 1391, 08:29 صبح
اینم یه timer سریع با api یادتون باشه هر کاری با api امکان پذیره فقط یکم وقت بزارید در میاد .


دوباره نوشتم فقط اگه مشکلی بود بگو بهت بگم چون 1 ساله برنامه نویسی نمیکنم و برنامه نویسی هم کمی فراره اگه مشکلی بود بگو
مشکل interval و granularity نیست.
مشکل حجم پردازشه.
این کار با GDI غیر ممکنه.
حالا تایمر باشه یا pulse Event ,فرقی نداره.

setroyd
شنبه 12 اسفند 1391, 13:32 عصر
مهم کارکرد هست نه پردازش شاید برای انتقال یه شی باشه یا مهم درخواست اون شخص هست که فکر میکنم اون کد پاسخگو بوده باشه .

m2011kh
دوشنبه 14 اسفند 1391, 18:33 عصر
بله ممنون پاسخگو بود.