sleep是会阻塞线程的
网上有些延迟函数测试下来还是会阻塞,而接下来推荐的代码则不会
1
2
3
4
5
6
7
8
9
|
procedure delay(dwMilliseconds:integer);
var
firsttickcount: longint;
begin
firsttickcount := gettickcount;
repeat
application.processmessages;
until ((gettickcount - firsttickcount) >= longint(dwMilliseconds));
end;
|
-
delphi中规定longint上限为2147483647,因为单位是毫秒,换算下是24.8天,所以基本不用担心,极端的不考虑
至于精度也不需要考虑,就算延迟1秒也不在乎那10几毫秒的精度
归零的问题我百度了下,是连续开机大约49天以后才会(不考虑极端)- -这些细节的确是我没注意到,在服务器上运行这些代码可能会出现问题
另外,之所以说比sleep好,是因为不堵塞进程,这个才是这篇文章的意义所在。
http://www.bccsafe.com/
用gettickcount计时有限制啊,精度一般大于10ms,而且,系统启动时间过长获取到的值会归零,貌似。