等待时间的函数或计数器使用(200分)

  • 主题发起人 主题发起人 dzm5773
  • 开始时间 开始时间
D

dzm5773

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
我想用一个等待的函数,不知delphi中有没有
提供。象vb中的wait等。若没有,能不能提供计数器的
使用方法。我想在一个事件中触发计数器,并等待25毫秒,然后
关闭计数器。比如:
begin
....以下是代码....
...
(启动计数器)
...
....以下是代码....
相当于调用函数的方法,不知该如何做??
 
用那个时钟的控件。
时间设为25毫秒。那你上面代码有括号的地方做成:

1、使时间的初始值为0
2、激活时钟
3、启动一个循环,不断检测时钟的值是否在23-33之间(可改),
不要固定一个值,因为可能会对不上号而错失良机。
循环内还可以做一点空事。
4、达到条件就 BRACK,进行下一步。

如此应该没问题。
 
TTimer只能精确到55ms.要达到25ms的延时,应该用Sleep(25);
 
所有的时间都不能精确到1/18秒,可以先执行一段测度程序,试一试25MS需要多少
累计数,在需要计时的地方循环执行累计数次,可达到25MS
 
当然有精确到1/18以下的API!
多媒体定时器可以精确到毫秒.

WaitableTimer可以精确到指令级(XX纳秒)!.

Sleep()通常比Timer要精确一些.
 
等待需要使用GetTickCount函数获得当前系统时钟振荡的毫秒, 见下例子:

procedure WaitAndRun(MSec: Longint);
var
OldTickCount: Longint;
begin
OldTickCount := GetTickCount;
While GetTickCount - OldTickCount < MSec do
Application.ProcessMessages;//让程序其他功能正常运行
end;

//按下按钮10秒钟后显示消息
procedure TForm1.Button1Click(Sender: TObject);
begin
WaitAndRun(10000);
ShowMessage('Hello');
end;
 
sleep等函数通常挂起了当前线程。这时就不能处理键盘消息。
用指令执行时间来定时更是不可取。

你可按如下方法写一个delay过程

procedure delay(MSec: Word);
var
t:tdatetime;
begin
t := now;
while (now比t多出毫秒数 < Msec) do Application.processmessages;
end;
 
看一看已答问提吧。
<a href='http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=105668'>TTimer的困惑</a>
 
首先,感谢大家提供的答案!!
但是,我发现delphi3没有sleep()函数!
是否大家把提供的方案,举几个实例!
多谢!!再次感谢大家的支持!!
并借此机会声讨美国和北约!!!
 
1.对于好的程序来说,不应该用"忙等"的延时方式.所谓"忙等",
是操作系统的一个概念,指进程正在等待某个事件的发生,但
等待操作用查询某个状态的方式实现,所以等待过程中CPU一
直在忙,所以叫做"忙等"."忙等"在多任务系统中是很不好的,
可能引起一系列问题,具体情况可以看有关OS的理论的书籍.
2.LSS的方法是忙等,huizhang的方法:
While GetTickCount - OldTickCount < MSec do
Application.ProcessMessages;//让程序其他功能正常运行
也是忙等.DELPHI的NM*控件的同步模式就是用这个方式实现的,
导致用了这些控件的程序很不稳定.Teleport Pro也是用这个
方法实现的,一旦运行Teleport Pro下载站点,系统的性能就大
幅度下降.而LeechFTP就是用消息响应模式做的,就可以在后台
安静地运行.
3.Sleep()是Win32API,在C++BUILDER里用是很方便的,在DELPHI
里可能要使用单元Windows.我没有用过DELPHI,不知道是不是这
样.
4.会长是不是应该在主页上添加有关声讨NATO的内容?
 
当然有sleep()
只有一个条件:就是你要uses windows

_________________________________________

快看这里:
http://www.nacced.org/
 
你可以到urus.163.net的[delphi]中看我写的一个极
精确的TTimer控件,精度极高哦,可以小于1ms的
 
to dzm5773: 你到底要做些什么, 怎么要用sleep了? sleep(25) = "Hang your
program 25 ms". 知道hang这个词吗, 就是你的这个程序死掉25毫秒.

问题越来越复杂化了, VB like "wait", 也就是说执行某个函数或过程的中间间歇
一段时间再继续执行.
 
OK. :)

------- by 3h 99.9.5 01:34
 
后退
顶部