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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)