vb6实现程序延时的几种方法

VB6在开发发贴机时,提交数据要用到延时程序,让程延时和等待.

从网上找了三种方法,三种方法以最后一种最好用.第一种如果不DOEVENTS的话,会使人感觉程序无反应一样



有以下方法:

1.使用Windows API函数Sleep
新 建一个工程,添加一个TextBox控件和一个CommandButton控件,再将以下代码复制到代码窗口
'声明:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Text1.text = "开始时延3秒"
Sleep 3000
Text1.text = "时延3秒结束"
End Sub



2.使用Timer()函数
这是用的最多的一种方法,也是在VB 联机手册中所推荐的。添加一个CommandButton控件,再将以下代码添加到代码窗口中:

Private Sub Command2_Click()
Dim Savetime As Single
Text1 = "Timer begin"
Savetime = Timer '记下开始的时间
While Timer < Savetime + 5 '循环等待
DoEvents '转让控制权,以便让操作系统处理其它的事件。 -----这个的功能差不多等于挂起,并且等待系统回应后把控制 权返还
Wend
Text1 = "Timer ok"
End Sub

这种方法虽然也很简单,但却 有有一个致命缺陷,那就是Timer函数返回的是从午夜开始到现在经过的秒数。所以Timer返回的最大值也只是60*60*24-1秒,如果从一天的 23:59:58秒开始计时等待5秒,那么程序会永远地循环下去。要进行改良,就要加上判断是否又开始了新的一天,那岂不是太麻烦.


// 上面一段是网上找的资料,其实可以不用timer函数,而是使用timer控件或者second函数,但是second函数如果是在第55秒后延长5秒的 话,也需要做到上面说的新的一分钟的判断,那也麻烦.当然,你也可以修改系统的时间,把他改在55秒前,总之还是麻烦。因此可以考虑用timer函数.创 建一个flag(标志),初始化flag为0,用timer每秒flag+1,当flag2=flag1+5的时候清零,根据条件判断执行下一命令 和 是否继续执行循环。大概的代码是:

dim flag1,flag2 as integer'该定义应该放在最最最上面,flag是全局

' 这部分可以放在command按下按扭的时候,或者onload
flag1=0
flag2=flag1+5

'timer1 部分
if flag2 <> flag1 then
flag1=flag1+1
print flag1
exit sub
else
'flag1=0
timer1.enabled=false
'先清零再做其他事情,包括中断 timer1.enabled=false等

end if
(代码可用)

上面的代码甚至可以一秒判断一次执行一个 不同的命令

if flag2 <> flag1 then
' new part
select case flag1
case 1: 'Express 1 while the first second
case 2: 'Express 2 while the second second
case 3: 'Express 3 while the third second
case 4: 'Express 4 while the fourth second
....
end select
flag1=flag1+1
exit sub

else
'flag1=0
timer1.enabled=false
' 先清零再做其他事情,包括中断 timer1.enabled=false等

end if



3.使用 Windows API函数timeGetTime()
timeGetTime函数没有参数,返回值是从开机到现在所经历的毫秒数,这个毫秒数是 非周期性递增的,所以不会出现Timer()函数出现的问题,而且这种方法的精确性高于上一种方法。添加一个CommandButton控件,再将以下代 码添加到代码窗口中:
'声明
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub Command3_Click()
Dim Savetime As Double
Text1 = "timeGetTime begin"
Savetime = timeGetTime '记下开始时的时间
While timeGetTime < Savetime + 5000 '循环等待
DoEvents '转让控制权,以便让操作系统处理其它的事件。
Wend
Text1 = "timeGetTime end"
End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值