PDA

View Full Version : مشکل با تایمر



mazy12
جمعه 31 خرداد 1387, 19:44 عصر
سلام دوستان ، من از چند تایمر تو برنامم استفاده کردم که یکی از این تایمرها باید همیشه عمل کنه اما متاسفانه وقتی برنامه عملیاتی که توی تایمر های دیگه است رو انجام میده تایمر دیگه از کار می افته و کار نمی کنه، برای حل کردن این مشکل چکار میشه کرد ؟

reza_optical
جمعه 31 خرداد 1387, 22:22 عصر
سلام
فکر کنم مشکل مالتی سرد هست و باید از راههای دیگه استفاده کنید شاید از تامیر Api استفاده کنید حل بشه البته مطمئن نیستم ولی وقتی در vb شما یه msgbox بدین دیگه کار دیگه ای نمیتونیین بکنین باید اون ok بشه بعد کار های بعدی انجام بشه

ASKaffash
شنبه 01 تیر 1387, 07:38 صبح
سلام
دوست عزیز عموما تا کار یک تایمر به پایان نرسد تایمرهای دیگر حتی اگر زمان شروع آنها فرارسیده باشند اجرا نمیشود واستفاده از چند تایمر با InterVal کم و زمان اجرای زیاد راه خوبی نیست بهتر است شما همه تایمرها را تبدیل به یک تایمر کنید و زمان InterVal را برای کمترین زمان همه فعالیتها ست کنید سپس درون تایمر با گرفتن متعیرهای مثلا Static برای هر فعالیت که خود مضاربی از Timer کوچکتر است با دستور if دستورات مورد نظر را مدیریت کرده ومجدد مقدار متغیر Static را صفر کنید(یعنی دستی مدیریت تایمرها را انجام میدهید)

مهران رسا
شنبه 01 تیر 1387, 13:13 عصر
سلام
دوست عزیز عموما تا کار یک تایمر به پایان نرسد تایمرهای دیگر حتی اگر زمان شروع آنها فرارسیده باشند اجرا نمیشود

فکر کنم اشتباه می کنید ...

اگه میشه موضوع رو یکمی بیشتر باز کنید و علمی تر توضیح بدید ...

ASKaffash
شنبه 01 تیر 1387, 13:34 عصر
فکر کنم اشتباه می کنید ...

اگه میشه موضوع رو یکمی بیشتر باز کنید و علمی تر توضیح بدید ...
سلام
این را تست کنید خواهید دید که Timer2 باعث اختلال در Timer1 میشود:
(هردو را InterVal=1000 تنظیم کردم)


Private Sub Timer1_Timer()
Static C1
C1 = C1 + 1
Me.Label1.Caption = C1
End Sub
Private Sub Timer2_Timer()
Static C2
x = Timer
Do While Timer - x < 4
Loop
C2 = C2 + 1
Me.Label2.Caption = C2
End Sub

خواهید دید که در زمان 5 ئانیه بعد Timer1 کار خواهد کرد ومجدد این عمل تکرار میشود.

mpmsoft
شنبه 01 تیر 1387, 14:46 عصر
دوستان وظیفه DoEvent همین هستش

به نوعی Doevent اجازه می ده تا تایمرها Quee بشن

ولی من با MultiThread موافقم


Lots of programmers don't even know about Visual Basic's DoEvents function. This is not surprising because few Visual Basic programs need it. DoEvents returns control to the operating system temporarily, allowing it to process other events that may have occurred. In my experience, the only time DoEvents is needed is when a program has code that takes a long time to execute, such as certain complex mathematical calculations. By calling DoEvents at strategic locations in your code you can improve program responsiveness.

To see what I mean, create a Standard EXE project in Visual Basic and place one CommandButton and one TextBox on the form. Then, put the following code in the Command Button's Click event procedure

Mbt925
یک شنبه 02 تیر 1387, 12:56 عصر
کاری که شما نکردید ، تحلیل کاری که برنامتون قرار انجام بده.

اینتروال ها خیلی کم تعیین شدن، پس نیازه که یه سری کارها بصورت خیلی فشرده و در بازه ی زمانی کم انجام بشن، بنابراین استفاده از روش آقای ASKaffash زیاد اصولی نیست.

از طرفی با استفاده از DoEvents کمی از مشکل حل میشه ولی استفاده از این گزینه هم راه گشا نیست ، چون بصورت موازی وظیفه ها انجام نمیشن :
امتحان کنید : دو تایمر با اینتروال 5 قرار بدید و توی هر دوشون یه حلقه ی 10000 تایی قرار بدید که شمارنده رو در یک لیست باکس ADD کنه (هر تایمر یک لیست باکس)، توی حلقه از DoEvents استفاده کنید.

فلسفه ایجاد نخ ها همین مشکل هست ، بنابراین تنها راه حل اصولی این مشکل استفاده از Thread هاست.
البته مدیریت نخ ها در وی بی خیلی ضعیف هست ، با این حال نمونه هایی قبلا معرفی شده که می تونید ازشون استفاده کنید.

mazy12
یک شنبه 02 تیر 1387, 15:21 عصر
ممنونم از همتون اطلاعات مفیدی بود ،


بنابراین تنها راه حل اصولی این مشکل استفاده از Thread هاست.
البته مدیریت نخ ها در وی بی خیلی ضعیف هست ، با این حال نمونه هایی قبلا معرفی شده که می تونید ازشون استفاده کنید.

میشه در مورد thread ها توضیح بیشتری بدید یا همون نمونه ها رو معرفی کنید.

Mbt925
دوشنبه 03 تیر 1387, 10:55 صبح
نمونه های ساده ی زیادی برای کار با نخ ها معرفی شده ، جستجو کنید.

نمونه های زیر یکم پیشرفته ترن:


http://barnamenevis.org/forum/showpost.php?p=463083&postcount=175


http://barnamenevis.org/forum/showpost.php?p=438961&postcount=100