看流星社区

 找回密码
 注册账号
查看: 3071|回复: 5

自定义延时函数,帮忙看下,谢谢!

[复制链接]

该用户从未签到

发表于 2011-3-22 09:54:14 | 显示全部楼层 |阅读模式
Public  Sub  Delay(Secs  As  Long)   
  Dim  dtime,  a   
     
  dtime  =  Timer  +  Secs   
  Do  Until  Timer  >  dtime   
      a  =  DoEvents()   
  Loop   
     
  End  Sub   
     
  '''延迟时间时调用  Call  Delay(Second)  

在调用时CPU 使用率好高,怎么回事?例如:
posemessage hwd, &h100, &h31,0&
posemessage hwd, &h101, &h31,0&
call delay(4)
结果CPU达到100%

该用户从未签到

发表于 2011-3-22 09:54:23 | 显示全部楼层
之1秒)
var
  FirstTickCount, Now: Longint;
begin
  FirstTickCount := GetTickCount();
  repeat
    Application.ProcessMessages;
    Now := GetTickCount();
  until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;

VB代码
sub Delay(MSecs as Long)
dim FirstTickCount as Long
dim nowTime as Long

FirstTickCount = GetTickCount()
Do Until (nowTime - FirstTickCount >= MSecs) or (nowTime < FirstTickCount)
  DoEvent()
  nowTime = GetTickCount()
loop
end sub

许久不曾写vb代码了,不知道正确与否.

该用户从未签到

发表于 2011-3-22 09:54:30 | 显示全部楼层
用循环来本来占用CPU就是很高的.不过如果有其他软件在使用CPU,会自动降下来.

该用户从未签到

发表于 2011-3-22 09:54:38 | 显示全部楼层
使用线程 用sleep()函数

该用户从未签到

发表于 2011-3-22 09:54:46 | 显示全部楼层
Do  Until  Timer  >  dtime   
      a  =  DoEvents()   
  Loop   
一直循环,中间没有Sleep让CPU“休息”一下,占用率当然高咯。。。

该用户从未签到

发表于 2011-3-22 09:54:56 | 显示全部楼层
DoEvents就是让cpu休息.
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-15 01:20

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表