当前位置:编程学习 > VB >>

Timer函数过夜的一些问题!

手上有段代码,使用Timer函数每隔20秒记录一个数据。
需要连续记录2天。
但是每次经过半夜0点的时候,Timer函数就会清0,然后程序就停止了。
不知道有没有人能给我个简单的代码例子能够解决这样的问题。 求助 因为 Timer 过子夜的时候,计数回 0 了。你在每一笔 Timer 增加 20 秒时都要检查是否会跨子夜。如果是,则要的 Timer 回零后,将你要达到的下一个 Timer 时减去一昼夜的秒数,否则永远不可能达到。
引用 1 楼 of123 的回复:
因为 Timer 过子夜的时候,计数回 0 了。你在每一笔 Timer 增加 20 秒时都要检查是否会跨子夜。如果是,则要的 Timer 回零后,将你要达到的下一个 Timer 时减去一昼夜的秒数,否则永远不可能达到。

能否告知具体怎么写吗? 你原来怎么写的?
引用 3 楼 of123 的回复:
你原来怎么写的?

能否给个简单的例子? 参考:
Option Explicit

Private mlNextTime As Long

Private Sub Form_Load()
   mlNextTime = 0
   Timer1.Interval = 1000
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
   Dim lTemp As Long
   lTemp = Timer()
   If (lTemp >= mlNextTime) Then
      Print lTemp
      mlNextTime = lTemp + 5     ' 每5秒触发
      'mlNextTime = lTemp + 20    ' 每20秒触发
      ' 判断是否“跨0时”
      If (mlNextTime >= 86400) Then mlNextTime = mlNextTime - 86400
   End If
End Sub
吓我一跳,开始没看清以为Timer控件有这问题。
那干脆用这个timeGetTime吧,至少还能撑二十多天吧?
http://bbs.csdn.net/topics/390629856

实在还不够就用那个QueryPerformanceCounter好了
引用 6 楼 bcrun 的回复:
吓我一跳,开始没看清以为Timer控件有这问题。
那干脆用这个timeGetTime吧,至少还能撑二十多天吧?
http://bbs.csdn.net/topics/390629856

实在还不够就用那个QueryPerformanceCounter好了

按我5F的方法进行处理,用到电脑报废都没问题。
实际上,楼主用的不是 Timer 控件。如果用 Timer 控件,根本不必考虑 Timer 函数的值,事件触发去处理就是了。

Option Explicit 
Private n As Long

Private Sub Form_Load()    
    mlNextTime = 0    
    Timer1.Interval = 1000    
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
   n = n + 1
   If n = 20 Then
      'Do something
      n = 0
   End If
End Sub
楼主用的是 Timer 函数和循环操作。

Dim lngNextTime As Long
Dim blnStop As Boolean

Private cmdRun_Click()
blnStop = False

lngNextTime = Timer + 20
If lngNextTime >= 86400 Then lngNextTime = lngNextTime - 86400

Do Until blnStop
    DoEvents
    'Must check cross-midnight case to keep 20 seconds interval
    If ((lngNextTime <= 20) And (Timer <= 20) And (Timer >= lngNextTime)) Or
       ((lngNextTime > 20) And (Timer >= lngNextTime)) Then
        'Do something
        lngNextTime = Timer + 20
        If lngNextTime >= 86400 Then lngNextTime = lngNextTime - 86400
    End If
Loop
End Sub

Private Sub cmdStop_Click()
    blnStop = True
End Sub
实际上,楼主可以用 GetTickCount 函数来取代 Timer,从开机算起,可以持续计时 49.7 天,完全可以满足楼主的需求。需要注意的是,GetTickCount 函数返回值的单位是 ms。

另外,如果采取了类似 Timer 函数跨子夜处理,用什么函数都可以无限期地进行下去。 我没说要用 Timer控件来处理楼主的问题。

我的代码,关键是在处理“过夜”和“时间间隔”的方面,好不…………
要是把重心放在 Timer控件上,我还写那么多代码干吗。
直接就说句:用Timer控件,Interval设置了20000就是了。
为什么一定要用Timer呢?用Sleep多好啊。
用while做一个死循环,做完指定任务后暂停20000毫秒,然后从头再来。一样的效果。

while(true)
  ;这里加入要做的事情。
Sleep 20000
Wend

如果还要控制它暂停核继续的话,就在加上一个布尔开关什么的。
或者用另一个线程去做这个循环。毕竟线程是可以随意暂停和开始的。
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,