VB与CPU利用率联系小的延迟函数
额..我用VB做挂 感觉挂一个两个的时候还没多大事 但是七八开以后CPU利用率接近100%此时延迟函数已经十分不准确 本来延迟100MS的需要数秒才能完成
以下是本人的函数
Public Sub delay(mtime As Long)
Dim i As Integer
For i = 1 To mtime
DoEvents
Sleep (1)
Next
End Sub
求一个不要求特精密但是能不依靠于CPU的延迟函数
PS.我朋友有个挂即使在100%的情况下依旧超快.好羡慕.. delphi
建个线程,不要用Timer
线程里直接sleep(1000)
这样就不会影响主线程了 不用延时啊。直接开线程。在线程里爱怎么sleep就怎么sleep。跟cpu没关系的。
打个比方
4个线程在同时瞬间执行了4*3*1000次的读内存。cpu不会到2%,时间不会肉眼可以察觉。 其实咱们写那点小挂根本都用不了多少cpu的。如果占用很高一定是代码的问题。
说的人家开发cpu的就叫咱这么折腾了折腾就快趴下了还混什么 Public Sub delay(mtime As Long)
Dim i As Integer
For i = 1 To mtime
DoEvents
Sleep (1)
Next
End Sub
这段cpu占用率太高。。。
不如得到两个时间差来做延时 占用CPU100%的情况是因为你的程序在一直使用着CPU的资源所造成的,
如上面所说的用线程,在线程中使用sleep,
sleep的功能是让当前线程自动放弃CPU时间片,留给其它的线程使用 PrivateDeclareFunctionGetTickCountLib"kernel32"Alias"GetTickCount"()AsLong
PrivateSubPause(ByvalsSecAsLong)
DimStartSecAsLong
StartSec=GetTickCount()
While(GetTickCount()-StartSec)/1000<sSec
DoEvents
Wend
EndSub
调用Pause(1)即可暂停一秒。 你们有个误区的,Sleep就是让系统挂起的,但是你只挂起1ms,而循环就是让系统忙起来的,这是矛盾的。你可以有两种方式:
第一,VB的Timer或者TimerAPI,然后利用系统时间比较法,这样做可以精确到秒,并且很容易实现长时间的比较0-24小时,单位秒。
第二,在循环中使用Sleep(100)而不是Sleep(1)可以显著改善Cpu占用率。 内容娘希匹!树清无能,丧权辱国!!!
页:
[1]