delphi取毫秒时间

xiaolinyuanstayup 2013-05-22 07:56:41
在程序里,我使用的是
t1:=GetTickCount;
t2:=GetTickCount;
r1:=t2-t1;
还用了一个timer,来计时,控制5秒时间,按下一个按钮,计时开始,但是从开始到5秒结束记录下的时间有超过5000毫秒,这是为什么啊?
...全文
2516 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2016-01-10
  • 打赏
  • 举报
回复
2013年的帖子.....
zscomputer 2016-01-09
  • 打赏
  • 举报
回复
Label3.Caption :=FormatFloat('0',(AWorkCount-lastc)/MilliSecondsBetween(now, lastt))+'kb/s'; sProgressBar2.Position:=AWorkCount; lastc:=AWorkCount; //用ProgressBar1.Position做lastc也可以 //smemo1.Lines.Add(MilliSecondsBetween(now, lastt).ToString()); lastt:=now;
kingzhang132 2013-08-03
  • 打赏
  • 举报
回复
请用多媒体定时器,PC里可以达到1MS级别定时
iamduo 2013-07-30
  • 打赏
  • 举报
回复

uses Windows;

var 
  i1,i2:Int64;
  diff,cc:Int64;
  b:Boolean;
begin
  QueryPerformanceCounter(i1);
...
...
  QueryPerformanceCounter(i2);
  diff := i2 - i1;
  b := QueryPerformanceFrequency(cc); // WINDOWS API 返回计数频率(Intel86:1193180)(获得系统的高性能频率计数器在一毫秒内的震动次数)
  if not b then cc := 1;              // false表示不支持高性能定时器
  Result := Round(diff * 1000 / cc);  // ms
end;
reverzeng 2013-07-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/sifenkesi/archive/2011/06/01/2065673.html 可以参考一下
lm_whales 2013-07-16
  • 打赏
  • 举报
回复
系统时钟每秒计时约为18.2次 1000/18.2 约为55 ms 即定时器的计时间隔大约是55 ms,再小一点的话,只不过连续计时几次而已,不可能用定时器精确计时的。 timeGetTime 可以精确到毫秒,再精确的话,就要在驱动程序里计时了。 而精确计算时间间隔,也比较麻烦。大约要用到RTSC指令。 或者 BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount // pointer to counter value ); BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount // pointer to counter value ); 等函数。
「已注销」 2013-07-16
  • 打赏
  • 举报
回复
使用多媒体计时器 timesetevent,可以获得毫秒级的精度
lm_whales 2013-07-16
  • 打赏
  • 举报
回复
1)GetTickCount 即使精度不够。 2)timer 定时器的精度也不够。 3)超过5000毫秒,才是正常的,恰好=5000的几率非常小,不够不会结束计时,只能是大部分时候,都是超过了5000毫秒的了。
kevinsem 2013-05-23
  • 打赏
  • 举报
回复
楼上方法不错,标记
ywx2008 2013-05-22
  • 打赏
  • 举报
回复
starttime:=now(); stoptime := Now(); r1 := MilliSecondsBetween(stoptime, starttime); //取得计时时间,单位毫秒(ms) StatusBar1.Panels.Items[2].Text := '本次查询耗时:' + inttostr(r1) + '毫秒';
rwlin 2013-05-22
  • 打赏
  • 举报
回复
系统滴答时间是准的,关键是timer 不是name精确的, 所以不可能那么干吗等于5000 ms
武稀松 2013-05-22
  • 打赏
  • 举报
回复
Timer必然不准啊. Timer是每隔Interval的时间发一个WM_Timer消息的.而消息在消息队列中排队,一个一个处理,WM_Timer消息被处理的时间要看前面消息多少,每个消息处理的时间长短.
sololie 2013-05-22
  • 打赏
  • 举报
回复
没太看懂你要表达啥,贴ontimer里的代码吧

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧