最近在使用Sleep函数延时需要延时2ms的时候,竟然发现Sleep函数是以10ms为单位进行延时的,也就是说所有小于10大于0的情况下都是10ms,所有大于10小于20的情况都是20,以此类推!大家都发现这个问题了吗?
那么下面的问题是如果我要实现2ms的延时该如何做?前提条件是与Sleep一样不能占用CPU资源,所以循环的方法就不大可行了。
那么下面的问题是如果我要实现2ms的延时该如何做?前提条件是与Sleep一样不能占用CPU资源,所以循环的方法就不大可行了。
解决方案 »
- "类TDataSource没找到" 的问题.谁遇到过啊.
- 新手的DLL问题~~在线~~
- 问个简单的问题,
- 一个窗体,左边放treeview,当单击treeview的一个节点时,右边显示form
- 怎样对一张图像进行无级放大?
- 怎么用MaskEdit实现限制用户只能输入某几个字母?
- 小弟的登陆程序还有点问题,请各位帮忙解决。
- 读取一个文本文件~555
- 请教高手关于数组和指针的问题!
- hellp me one easy question. 有将16进制转化为2进制的函数吗--谢谢
- 如何在一个Edit里输入关键字然后再DBGRID中能够将与该关键字近似的记录用特殊的颜色选中?
- access数据库查询记录,用个很简单的sql语句查询,竟然会用10秒?为什么?记录才几百条。
procedure SysDelay(aMs: Longint);
var
TickCount : LongInt;
begin
TickCount:=GetTickCount;
while GetTickCount - TickCount < aMs do
Application.ProcessMessages;
end;
大家还有更好的办法吗?还有谁能解释一下Sleep到底为何只能精确到10ms ?
时间,建议搂住用Timer对象,他和semphore,mutex等都是windows内建对象,用的是硬件时钟,应当能
满足搂住的需要,在msdn的帮助中有,属于windows 的api,delhi没有封装的。
而且在瘟九八下精度更差得多。sleep
getTickCount
TTimer
这三个东西都是同一精度级的。
后来win95开始 进一步支持了10ms左右的精度(不知道原理),可能是8254提供了新的基准,因为它本身能产生3个时钟。现在看不到8254了,都集中在北桥了。8254 直接连到8255 接到PC喇叭,可以发声。
同时它还是很多游戏的始终基准,所以修改了8254的寄存器,改变这个频率,就能修改有些得速度,这就是变速齿轮的原理。
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=200249http://lysoft.7u7.net