نمایش نتایج 1 تا 16 از 16

نام تاپیک: سوال در مورد تایمر.

  1. #1

    سوال در مورد تایمر.

    می خوام برنامه ای بنویسم که توش کنترل ها رو حرکت میدم.برای این کار در رویداد Tick تایمر یک واحد به مقدار Button1.Left اضافه می کنم.اما مشکل اینجاست که با این که Interval رو 1 گذاشتم،پس باید در هر ثانیه هزار بار رویداد تیک اجرا بشه و کنترل هزار پیکسل حرکت کنه و در کمتر از 2 ثانیه عرض مانیتور رو طی کنه ولی این زمان خیلی بیشتره.حدود 10 برابر.یعنی انگار هر 1میلی ثانیه اجرا نمیشه.
    علتش چیه؟

  2. #2

    نقل قول: سوال در مورد تایمر.

    interval رو روی 1000 بذار تا در یک ثانیه دستورات رو اجرا کنه

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1390
    محل زندگی
    همین اطراف
    پست
    86

    نقل قول: سوال در مورد تایمر.

    سلام
    نم خوام بحستونو خراب کنم فقط یه سوال کوچولو دارم
    چرا وقتی من تایمر در برنامه ام ران می کنم ؛ برنامه از حالت پنهان (hide) خارج میشه

  4. #4
    کاربر دائمی
    تاریخ عضویت
    دی 1388
    محل زندگی
    رامسر
    پست
    565

    نقل قول: سوال در مورد تایمر.

    سلام
    موضوع جالب شد!
    من دو تا تایمر با دو تا Counter گذاشتم، یکی با Interval 1، یکی با 10، جفتشون با یک سرعت بالا می رفتند!!!
    کسی نمی دونه؟

  5. #5
    کاربر دائمی
    تاریخ عضویت
    دی 1388
    محل زندگی
    رامسر
    پست
    565

    نقل قول: سوال در مورد تایمر.

    interval رو روی 1000 بذار تا در یک ثانیه دستورات رو اجرا کنه
    شما متوجه سوال شدی؟

  6. #6
    Super Moderator
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    WinNT
    پست
    5,936

    نقل قول: سوال در مورد تایمر.

    از لحاظ تئوریک اینطور هست و باید تو 1 ثانیه 1000 بار اجرا بشه ولی تو عمل نه چون برنامه یک Message Queue داره که ترد اصلی برنامه ( Main Thread ) به ترتیب به پیغام های داخل اون رسیدگی میکنه ، حالا بسته پیغام های منتظر داخل صف و Priority اون ترد و Time Sliceing پردازنده ، Main Thread ممکنه تو 1 ثانیه کل صف رو پردازش کنه یا تو n ثانیه ؛ حالا بماند که خود پلتفرم Net. هم تو این سرعت پائین نقش داره ( به دلیل وجود زبان میانی و ... ) !

    اگر میخواین زمان بندی دقیقی داشته باشید باید از High Resolution Timer ها استفاده کنید .
    آخرین ویرایش به وسیله Felony : دوشنبه 31 مرداد 1390 در 14:53 عصر

  7. #7

    نقل قول: سوال در مورد تایمر.

    نقل قول نوشته شده توسط mehran_sh_t مشاهده تاپیک
    شما متوجه سوال شدی؟
    اینجور نیست که در هر ثانیه 1000 بار اجرا بشه
    اگر بذاری رو 1000 یعنی این که در 1000 میلی ثانیه یک بار اجرا بشه

  8. #8

    نقل قول: سوال در مورد تایمر.

    interval رو روی 1000 بذار تا در یک ثانیه دستورات رو اجرا کنه
    من میخوام بطور پیوسته حرکت کنه.اینطور که شما گفتی بعد از یک ثانیه 1000 پیکسل جلوتر ظاهر میشه.

    اینجور نیست که در هر ثانیه 1000 بار اجرا بشه
    اگر بذاری رو 1000 یعنی این که در 1000 میلی ثانیه یک بار اجرا بشه
    منم نگفتم میذارم روی هزار.گفتم میذارم روی 1 تا در ثانیه 1000 بار اجرا بشه.
    در ضمن وقتی یک بازی اجرا میکنم(need for speed Hot Pursuit) و به ویندوز برمیگردم سرعتش بیشتر شده و انگار همون هزار بار در ثانیه س.

    اگر میخواین زمان بندی دقیقی داشته باشید باید از High Resolution Timer ها استفاده کنید .
    با تشکر.میشه یه مقدار در موردش توضیح بدین.

  9. #9

    نقل قول: سوال در مورد تایمر.

    اها، شرمنده متوجه نشدم
    مشکل اینجاست که اون میزان دستوراتی که نوشتی نمیتونه در یک میلی ثانیه انجام بشه واسه همین زیاد طول می کشه
    اگر می خوای واسه طراحی هایی مثل گیم استفاده کنی بهتره از موتور های گیم مثل agate که با opengl پیاده سازی شده و رایگان هم هست استفاده کنی

  10. #10

    نقل قول: سوال در مورد تایمر.

    میشه یکم در مورد agate توضیح بدی؟چی هست و با چه زبانی برنامه نویسی میشه و از کجا باید گیر آورد؟
    با تشکر.

  11. #11
    کاربر دائمی آواتار Farshid007
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    Karaj
    پست
    1,250

    نقل قول: سوال در مورد تایمر.

    نقل قول نوشته شده توسط Padrone مشاهده تاپیک
    اینجور نیست که در هر ثانیه 1000 بار اجرا بشه
    اگر بذاری رو 1000 یعنی این که در 1000 میلی ثانیه یک بار اجرا بشه
    اگه در هر ثانیه 1000 بار اجرا بشه
    فکر کنم از CPU تون دود که چه عرض کنم اتیش بلند میشه

  12. #12

    نقل قول: سوال در مورد تایمر.

    اگر میخواین زمان بندی دقیقی داشته باشید باید از High Resolution Timer ها استفاده کنید .
    لینکی که گذاشتین رو مطالعه کردم ولی چیزی نفهمیدم.میشه توضیح بدین؟
    یعنی یک کنترل آمادست؟از کجا دانلود کنم؟یا تو چه فضای نامی هست؟ممنون میشم راهنمایی بفرمایین.

  13. #13
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: سوال در مورد تایمر.

    خوشم میاد هر کس از راه میرسه پست میده.
    همونی که آقای تاجیک نوشتن درسته.
    علتش اینه که سیستم عامل ویندوز خودش تقریبا هر ۱۶ میلی ثانیه پیغام ها رو بررسی میکنه.(نمیدونم چرا ۱۶ ولی این رو قبلاً توی یک وبسایت خوندم/فکر میکنم MSDN)
    و به همه اکیداً توصیه میشه که هرگز از تایمر استفاده نکنند مگر این که مطمئن باشن استادی که تمرین داده به اندازه کافی خر هست که مجبورشون کنه.
    چون هیچگونه تضمینی برای درستی عملکرد.درستی interval (کم و زیاد شدن) و یا جلوگیری از دستکاری از بیرون برنامه وجود نداره.
    راه درست همیشه استفاده از signal, wait ,mutex,monitor,semaphore , thread, join, process, shared memory, .... و این موضوعات هست.

  14. #14

    نقل قول: سوال در مورد تایمر.

    راه درست همیشه استفاده از signal, wait ,mutex,monitor,semaphore , thread, join, process, shared memory, .... و این موضوعات هست.
    اگه با اینا که گفتین آشنایی داشتم که به فکرم می رسید ازشون استفاده کنم!خواهش می کنم درباره شون یکم توضیح بدین.
    من برای این که مانند تایمر بتوانم دستورات مشخصی را در هر لحظه اجرا کنم در حلقه ی While(True) از دستور
    Thread.Sleep(1);

    استفاده کردم ولی بقیه ی قسمت های برنامه از کار میفته و تا زمانی که تو حلقه ست نمیشه مثلا روی دکمه کلیک کرد یا در تکست باکس تایپ کرد.چیکار باید کرد؟
    خیلی ممنون.

  15. #15
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    R0)ot -> Main();
    پست
    1,158

    نقل قول: سوال در مورد تایمر.

    نقل قول نوشته شده توسط aliblue مشاهده تاپیک
    اگه با اینا که گفتین آشنایی داشتم که به فکرم می رسید ازشون استفاده کنم!خواهش می کنم درباره شون یکم توضیح بدین.
    من برای این که مانند تایمر بتوانم دستورات مشخصی را در هر لحظه اجرا کنم در حلقه ی While(True) از دستور
    Thread.Sleep(1);

    استفاده کردم ولی بقیه ی قسمت های برنامه از کار میفته و تا زمانی که تو حلقه ست نمیشه مثلا روی دکمه کلیک کرد یا در تکست باکس تایپ کرد.چیکار باید کرد؟
    خیلی ممنون.
    دوست عزیز شما با این کارتون میاین و سرباری می شین روی پروسه برنامه و از اونجایی که شما توقف دادین این دستور روی Thread اصلی برنامه اجرا می شه و کلا برنامه قفل می شه . برای رهایی از این مشکل بهتر هست شما با بحث Thread ها آشنا بشین یا روال برنامه رو در یه Thread اجرا کنید یا روال Timer رو در یه Thread Timer اجرا کنید .

    باتشکر احسان

  16. #16
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    R0)ot -> Main();
    پست
    1,158

    نقل قول: سوال در مورد تایمر.

    دوست عزیز به شما و دیگر دوستان پیشنهاد می کنم مقاله زیبای جناب شاه محمدی رو مطالعه کنید . در این مقاله این مشکلات با راه حل شرح داده شده است .
    مقاله آموزش Multi Threading (چندنخی) در Visual Basic.Net

    باتشکر احسان

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •