如何让一个For循环中,每执行完一个过程后暂停3秒再执行下个过程,再循环?

geekman9 2009-05-14 07:31:22
查了好久,看了很多老大们提到用如下方法:
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Call Sleep(5000)

但是在我机子上根本不生效,请问是我Win系统问题,还是这个方法我哪里用得不对。

如下示范循环。

for i=1 to 10
执行语句1
暂停3秒
执行语句2
next

我是VB菜鸟,请哪位达人帮我解决,谢谢先!
...全文
2213 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2009-05-28
  • 打赏
  • 举报
回复
Sleep不起作用?
第一次听说。
不过有你有很多方法可以实现Sleep的功能。
xbin_2009 2009-05-28
  • 打赏
  • 举报
回复
关于Doevents函数的解释和例子

http://tieba.baidu.com/f?kz=164436320
zhiyongtu 2009-05-19
  • 打赏
  • 举报
回复
顶楼上
僵哥 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zydscaline 的回复:]
15楼的问题:
sleep 是让CPU休息,什么也不干
oevents是让CPU去听别人的指派,腾出精力去干别的去,这二个不要同时用啊
[/Quote]
Sleep是告诉OS在一定时间内暂时不分配CPU时钟给当前线程
DoEvents通常用在循环等作业当中,用于处理消息,相当于执行一次
PeekMessage + TranslateMessage + DispatchMessage
zydscaline 2009-05-18
  • 打赏
  • 举报
回复
15楼的问题:
sleep 是让CPU休息,什么也不干
oevents是让CPU去听别人的指派,腾出精力去干别的去,这二个不要同时用啊
su272009 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhuhuofong 的回复:]
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim jia As Integer
Private Sub Command1_Click()
jia = 0
For i = 1 To 20
jia = jia + 1
Label1.Caption = jia
Sleep (3000)
DoEvents
Next
Debug.Print "执行完毕"End Sub

发现一个古怪问题,Command1一步执行之后,开始计数时,再点几下Command1时,jia的值并不为0,好像并没有执行jia = 0 语句
[/Quote]
怎么运行那么慢?!!这是什么问题
su272009 2009-05-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xbin_2009 的回复:]
引用 6 楼 clear_zero 的回复:
for i=1 to 10
执行语句1
StartTime = Timer ' 设置开始暂停的时刻。
Do While Timer < StartTime + 3 '暂停3秒
DoEvents ' 将控制让给其他程序。
Loop
执行语句2
next


请教一下:在Do循环里的DoEvents 有优势吗?
[/Quote]
这点我也不明白??也想问个究竟
kongxinBB 2009-05-16
  • 打赏
  • 举报
回复
路过顶顶
li_net 2009-05-16
  • 打赏
  • 举报
回复
呵呵
我是一道光_ 2009-05-16
  • 打赏
  • 举报
回复
延时函数 API的 sleep就可以的了...
嗷嗷叫的老马 2009-05-16
  • 打赏
  • 举报
回复
我对SLEEP函数不生效更感兴趣........

LZ能不能详细测试一下?
chengqifeng 2009-05-16
  • 打赏
  • 举报
回复
路过顶顶
zhuhuofong 2009-05-16
  • 打赏
  • 举报
回复
我要的是For i = 1 To 20 时结束过程。我说的这种情况。for 的终值会大于20
zhuhuofong 2009-05-16
  • 打赏
  • 举报
回复
谢谢啊 16楼老大
原来代码先后顺序不对。
你去我发的贴顶一下,我去结贴。
用户 昵称 2009-05-16
  • 打赏
  • 举报
回复
你应该

Label1.Caption = jia 
DoEvents
DoEvents
jia = jia + 1
Sleep (3000)
zhuhuofong 2009-05-16
  • 打赏
  • 举报
回复
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim jia As Integer
Private Sub Command1_Click()
jia = 0
For i = 1 To 20
jia = jia + 1
Label1.Caption = jia
Sleep (3000)
DoEvents
Next
Debug.Print "执行完毕"End Sub

发现一个古怪问题,Command1一步执行之后,开始计数时,再点几下Command1时,jia的值并不为0,好像并没有执行jia = 0 语句
xbin_2009 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 clear_zero 的回复:]
for i=1 to 10
执行语句1
StartTime = Timer ' 设置开始暂停的时刻。
Do While Timer < StartTime + 3 '暂停3秒
DoEvents ' 将控制让给其他程序。
Loop
执行语句2
next
[/Quote]

请教一下:在Do循环里的DoEvents 有优势吗?
神马都能聊 2009-05-15
  • 打赏
  • 举报
回复
楼主的机器确实牛...
zydscaline 2009-05-15
  • 打赏
  • 举报
回复
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) +9
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime

这个我想更好用一些也不用声明之类的,不过我只在EXCELL中用哦,很好用的!!
zydscaline 2009-05-15
  • 打赏
  • 举报
回复
使用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
加载更多回复(8)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧