如何让程序暂停一小段时间?不用TIMER控件?

tuoxieshu 2004-12-26 12:00:26
Sleep或强制循环+DOEVENTS都占CPU100%,有其他的办法吗?谢谢!
...全文
270 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacob 2005-01-05
  • 打赏
  • 举报
回复
我试了 单纯sleep不占cpu的
如果你发现sleep占cpu,那么是你其他地方占了CPU
这样的话,如果你用其他方法暂停,也是要占cpu的
占cpu的地方可能是你doevents的地方造成的
你检查其他地方把,光延迟 sleep或者getTickCount都可以的
lloyd_wu 2005-01-05
  • 打赏
  • 举报
回复
你告诉你的客户换一个两个CPU的机器不就可以了,这样 一个CPU你专门去占用1
stcbc 2005-01-04
  • 打赏
  • 举报
回复
关注
Hideal 2005-01-04
  • 打赏
  • 举报
回复
to : changyucun(菜猪)

你很吊啊,搞笑。
apple_001 2005-01-04
  • 打赏
  • 举报
回复
除了do loop,就是timer,好像自己做程序没有太好的办法能做成延时阿
tuoxieshu 2004-12-28
  • 打赏
  • 举报
回复
模式窗体是“好”主意?--------老大,那定时怎么办?呵呵 还是用记时器啊?晕~~~
  • 打赏
  • 举报
回复
干脆设置为ENABLED =FALSE,VISIBLE=FALSE
  • 打赏
  • 举报
回复
这个主意不错UP
wwqna 2004-12-28
  • 打赏
  • 举报
回复
用一简单方法实现!
在你要暂停的地方弹出模式窗体,styleboder设为1,并设为一象素大小,上面放一timer,就搞了,
时间到了,就unload
samwzhang 2004-12-28
  • 打赏
  • 举报
回复
循环等待的时候插入
sleep 1
doevents
是不会占CPU资源的,如果你的CPU占用率还是100%,那么肯定是别的地方造成的。
EmilMatthew 2004-12-28
  • 打赏
  • 举报
回复
请教楼主你是如何测试出占用CPU资源为100%的?
tuoxieshu 2004-12-27
  • 打赏
  • 举报
回复
我用的方法 可以非常精确 小于0.01S 但同样用DO……DOEVENTS……LOOP的结构 一样很占CPU资源 没有另一种思路吗?
tuoxieshu 2004-12-27
  • 打赏
  • 举报
回复
楼上大哥,这个方法我知道啊 可是很占CPU资源啊 没有更好的办法吗?
Keepmyself 2004-12-27
  • 打赏
  • 举报
回复
这里的86400是什么?
舍南舍北 2004-12-27
  • 打赏
  • 举报
回复
Function Delay(ByVal n As Single)
Dim tm1, tm2 As Single
tm1 = Timer
Do
tm2 = Timer
If tm2 < tm1 Then tm2 = tm2 + 86400
If tm2 - tm1 > n Then Exit Do
DoEvents
Loop

End Function
tuoxieshu 2004-12-27
  • 打赏
  • 举报
回复
86400是1天的秒数。晕 这个函数还真打算暂停多长时间啊 呵呵。好象 大家的思路都是用循环或是SLEEP函数。不过在VB里这两种方法都太占CPU资源了----能达到100%,太可怕了。慢点的机器受不了的吧。 没有其他的思路吗?要求是达到使用TIMER控件的效果----不太占用CPU资源的方法。
zcm123 2004-12-27
  • 打赏
  • 举报
回复
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

比如
Sleep 1 ' to prevent hogging of the CPU
herolibo 2004-12-26
  • 打赏
  • 举报
回复
用这个,不需要控件,也不需要API,但是只有整数秒的精度
Public Function pause(seconds As Integer)
Const SECS_INDAY = 24! * 60 * 60
Dim start As Single
start = Timer
Do: Loop Until (Timer + SECS_INDAY - start) Mod SECS_INDAY >= seconds
End Function
EmilMatthew 2004-12-26
  • 打赏
  • 举报
回复
这是我利用KENEL32 API写的一个DELAY函数,会用这个函数的人都知道,写游戏做循环就靠它了。
在机能充许的情况下,精度应该是0。05秒。
使用时只要加类似Delay(1.05)即可,

Option Explicit
Public Declare Function GetTickCount Lib "kernel32" () As Long
Const MS_DELAY = 50 '20FPS

Public Function Delay(Times As Single)
Dim mblnRunning As Boolean
Dim mlngTimer As Long
Dim caculate As Single
mblnRunning = True
caculate = 0
Debug.Print Times
Do While mblnRunning And caculate < Times
If mlngTimer + MS_DELAY <= GetTickCount() Then
mlngTimer = GetTickCount()
caculate = caculate + 0.05
End If
DoEvents 'Important!
Loop
End Function
tuoxieshu 2004-12-26
  • 打赏
  • 举报
回复
晕 我很急啊~~ 哪位给我解释一下啊?
加载更多回复(1)

7,762

社区成员

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

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