vb 定时器的问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 06:33:39
我在VB程序中使用了一个Timer控件, Interval=60000, 每分钟启动一次Timer事件, 事件中判断当时间=20:00 执行一段代码, 但是发现VB定时器不准, 实际上每次timer事件的间隔时间有时=60秒, 有时为61或62秒. 这样就会造成下面这种现象: 比如上一次Timer事件发生在19:59:59, 下一次Timer事件发生在20:01:00, 而不是发生在期望的20:00:59, 这样的话, 计划在20:00执行的代码就执行不到. Timer事件代码如下:

Private Sub Timer1_Timer()
Dim sTime As String
sTime = Format(Time, "hh:mm")

If sTime = "20:00" Then
'执行20:00点的任务
End If
End Sub

请教有没有较好的解决方法.
我不想使用系统的计划任务

如果设置Interval=1000(1秒钟), 那么在timer事件里最多会出现60次 时间=20:00 的情况, 而我只要执行一次任务, 所以不能设置为1000

谢谢ljl888900:
Interval 设置为60,000 是 60秒(一分钟启动一次), 程序开始运行后, 理想状态是每隔1分钟便触发一次Timer事件, 在事件中判断是否是20:00(不考虑秒数), 若是则执行相应代码. 若不是, 则等待下一次事件触发.

假设上一次事件在19:59:59触发的, 下一次触发时间理想时间是在20:00:59(60秒),那么满足时间=20:00,可以执行预计任务, 但是实际情况是下一次触发时间非常有可能是在20:01:00(实际间隔了61秒) 或在20:01:01(实际间隔了62秒). 我对每次事件触发的时间都做过记录,才发现这种实际间隔>=60秒的情况的. 这样就造成了 时间跳过了20:00, 任务未得到执行.

网上查过资料, 得知VB 的 timer控件不是

如果现在时间是19:57:00,Interval=60000,那么timer1第一次激活时间是20:03:00,早过20:00:00,所以这种方法存在很大的误差。

既然要监视从19:59:59到20:00:00,二者相差仅1秒,你就应该设Interval=1000才对。

这就是你要精确监视时间所付出的代价。可以说,除此之外,似乎找不到其他的办法。

VB的时间是不太准确,你可以让它每10MS读取一下系统时间,用系统时间来计算,这样时间就能很准确

Interval=1000, 在timer事件中设置一个计数器,每一秒加一次,用if语句,当加到60的时候执行20:00的任务

.......Timer控件的精度只有0.05s
可以使用API函数的timeGetTime函数
此函数记录的是Windows开机以来所经过的时间..
nowtime=timeGetTime
If timeGetTime-nowtime=1000 Then'经过1秒
.....
End If

不知道能不能帮得上你的忙...