ورود

View Full Version : سوال: سوال در مورد تایمر



javid_debugger
یک شنبه 22 اسفند 1389, 14:59 عصر
سلام دوستان. من یه سوال داشتم من می خواستم بدونم چه جوری با استفاده از یک تایمر در برنامه میشه کاری کرد که هر یک ساعت رویداد داخلش رو اجرا کند؟؟

ممنون میشم اگر کسی راهنمایی کنه.

soheila_1643
یک شنبه 22 اسفند 1389, 15:05 عصر
سلام یک تایمر به دیزاینر بندازین و در پراپرتی Interval مدت زمان رو که به میلی ثانیه هست قرار بدید برای یک ساعت میشه 3600000. حالا در ایونت تایمر تیک(Tick) کدتون رو بنویسن. در ضمن پراپرتی Enable رو هم true بذارید.

M.T.P
یک شنبه 22 اسفند 1389, 15:16 عصر
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim MyTick As Long

Private Sub Form_Load()
MyTick = Tick
End Sub

Private Sub Timer1_Timer()
If (Tick - MyTick) > 3600 Then
MyTick = Tick
Call MyEvent
End If
End Sub

Function Tick() As Long
Tick = GetTickCount \ 1000
End Function

Sub MyEvent()
'.....
End Sub

javid_debugger
یک شنبه 22 اسفند 1389, 15:22 عصر
نمیشه که اینجوری. چون تو interval = 3600000 بزارم اررور میده. لطفا خودتون امتحان کنید
اگه میشه با یک حلقه راهنماییم کنید

Slytherin
یک شنبه 22 اسفند 1389, 16:04 عصر
یک تایمر روی فرم بگذارید و اینترول او رو برابر با 1000 قرار دهید و سپس کد زیر را بنویسید.

Dim STime As Integer
Private Sub Timer1_Timer()
STime = STime + 1
If STime >= 3600 Then
'Dastoore Morede Nazar
End If
End Sub

این کد پس از یک ساعت فعال خواهد شد...

javadt
یک شنبه 22 اسفند 1389, 16:11 عصر
نمیشه که اینجوری. چون تو interval = 3600000 بزارم اررور میده. لطفا خودتون امتحان کنید
اگه میشه با یک حلقه راهنماییم کنید

تايمر مي تونه يك عددي بين
0 تا 65536
بگيره .واسه همين ارور ميده

محسن واژدی
یک شنبه 22 اسفند 1389, 16:16 عصر
سلام

اگه میشه با یک حلقه راهنماییم کنید
استفاده از حلقه درصد مصرفی cpu را افزایش میدهد و توصیه نمیشود

جناب Slytherin (http://barnamenevis.org/member.php?163489-Slytherin) جوابتون را دادند اما تنها چیزی که هست رویداد این کد تنها یکبار اجرا میشود اما بصورت زیر صحیح میشود

Dim STime As Integer
Private Sub Timer1_Timer()
STime = STime + 1
If STime >= 3600 Then
STime =0
'Dastoore Morede Nazar
End If
End Sub



موفق باشید

M.T.P
یک شنبه 22 اسفند 1389, 16:19 عصر
یک تایمر روی فرم بگذارید و اینترول او رو برابر با 1000 قرار دهید و سپس کد زیر را بنویسید.

Dim STime As Integer
Private Sub Timer1_Timer()
STime = STime + 1
If STime >= 3600 Then
'Dastoore Morede Nazar
End If
End Sub

این کد پس از یک ساعت فعال خواهد شد...

البته این کد مشکل نداره اما به دقتش نمیشه مطمئن بود. اگه شما پروسه ای یا ایونتی به اجرا دربیارین که روال فراخوانی تایمر رو به تاخیر بیانداره اونوقت مدت زمان سپری شده که در متغیر STime هست مدت زمان دقیق سپری شده نخواهد بود.
بهترین راه و مطمئن ترین راه استفاده از GetTickCount هست.

دوست عزیز سوال کننده دستوراتتون رو در روال MyEvent که در پست قبل گذاشتم بنویسید و Interval تایمر رو 1000 بگذارید. همین.

javid_debugger
یک شنبه 22 اسفند 1389, 17:32 عصر
سلام

استفاده از حلقه درصد مصرفی cpu را افزایش میدهد و توصیه نمیشود

جناب Slytherin (http://barnamenevis.org/member.php?163489-Slytherin) جوابتون را دادند اما تنها چیزی که هست رویداد این کد تنها یکبار اجرا میشود اما بصورت زیر صحیح میشود

Dim STime As Integer
Private Sub Timer1_Timer()
STime = STime + 1
If STime >= 3600 Then
STime =0
'Dastoore Morede Nazar
End If
End Sub



موفق باشید

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

Slytherin
یک شنبه 22 اسفند 1389, 18:00 عصر
این فقط یک بار اجرا میشه؟؟ من می خواستم که هر یک ساعت یک بار اجرا بشه.
اگر به خام هر 30 دقیقه یک بار اجرابشه چی؟؟

این هر ساعت 1 بار اجرا می شود.
برای اینکه هر 30 دقیقه یک بار انجام شود به جای عدد 3600 بنویسید 1800.
بقیه چیز ها هم نیازی نیست تغییری کنه...

ali190
یک شنبه 22 اسفند 1389, 19:07 عصر
سلام
شما میتونید از این ocx هم استفاده کنید که با سه واحد زمانی ثاینه ، دقیقه و ساعت کار میکنه
دقیقاً همون چیزیه که میخواین
فقط واحد زمانی ، و زمان دلخواه رو تعیین کنید و کدی رو که میخواین در اون واحد زمانی loop بشه رو بهش بدین
همین!
یاعلی