关于sleep问题
今天做程序,需要计算一下调用函数之前和之后所用的时间,期间用了sleep,但是结果发现,我sleep(200),得到的时间竟然有188的时候,我不明白为什么会小于200,这是sleep的问题,还是我计算时间函数的问题呢?,求高人回答。。。谢谢
procedure TForm1.Button1Click(Sender: TObject);var i,s:integer; ReadPre, ReadSith: TDateTime;begin i:=0; while i<100 do begin ReadPre := Now; sleep(200); ReadSith := Now; s:= MilliSecondsBetween(ReadPre, ReadSith); memo1.Lines.Add(inttostr(s)); inc(i); end;end;end.
procedure MyWait(iLen:DWORD);var dwWait :DWORD;begin dwWait := GetTickCount(); while GetTickCount - dwWait < iLen do begin sleep(1); Application.ProcessMessages; end;end;
[解决办法]
间隔还是使用GetTickCount
sleep 是暂停的意思。比如你拖动窗口也是会占用时间的。
[解决办法]
为什么要这么在意几毫秒,或者几十毫秒呢?需要非常精确?
[解决办法]
太精确了占用CPU就很高,绝大部分API的精度都是15一个片,
[解决办法]
无语了
[解决办法]
GetTickCount的精度也不够,大约10毫秒左右.
[解决办法]
GetTickCount 我试过了,出现同样的问题,应该是精度的问题