精确到毫秒的计时器,如何做呢?

LinuxCard 2012-12-18 10:47:22
我想实现这样的功能:
给定一个时间,比如12:20:30 005 这样一个时间,要求在这个时间启动一个函数

请问,我该如何实现呢?timer精确只能到300毫秒,我希望最少能精确到100ms

...全文
745 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlzjg 2012-12-24
  • 打赏
  • 举报
回复
pc上不精确
simonhehe 2012-12-22
  • 打赏
  • 举报
回复
试试下边的代码能否满足需求

var
  TimeB, TimeE, F : Int64;
  d1 : Double;
  i, j: integer
begin
  QueryPerformanceFrequency(F);  //时钟频率
  QueryPerformanceCounter(TimeB);  //计时开始
  for i := 0 to 1000000 do
    j := i;

  QueryPerformanceCounter(TimeE);
  d1 := (TimeE - TimeB)/F*1000; 

  ShowMessage(FloatToStr(d1));  //d1毫秒级
end;
54993699 2012-12-22
  • 打赏
  • 举报
回复
自己写的话就用多媒体计时器, 想省事用CNPACK控件包里的封装好的timer, 精度要比自带的高出好多.
  • 打赏
  • 举报
回复
楼主要的是定时执行的精度,所以只能用多媒体计时器,其他的方法可能时间到了,但是你的线程并没有得到执行(系统中很多活跃线程,轮一遍几百毫秒就过去了)。
lhy 2012-12-21
  • 打赏
  • 举报
回复
一般能精确到1/64秒
爱蹄子的羊头 2012-12-21
  • 打赏
  • 举报
回复
用 QueryPerformanceFrequency和QueryPerformanceCounter 才能这么高的精度
hsfzxjy 2012-12-21
  • 打赏
  • 举报
回复
取CPU时间周期
hongss 2012-12-19
  • 打赏
  • 举报
回复
GetTickCount基本能精确到16ms
haitao 2012-12-19
  • 打赏
  • 举报
回复
如果不是嵌入式,这么高的时间精确意义不大吧 pc的系统时钟可能能很难精确对时到ms
蓝色光芒 2012-12-19
  • 打赏
  • 举报
回复
CreateWaitableTimer与SetWaitableTimer这两个来设置绝对时间响应,内核级的,应用程序开销最小.但是精度达不到1ms, MMSystem单元的timeSetEvent函数可以作到很高的精度。
maohailin_ 2012-12-19
  • 打赏
  • 举报
回复
先用timer定时到大约时间,然后再精确度更高的函数进行精确计时,比如GetTickCount等等一些精确到毫秒级的函数进行检测时间
SQLDebug_Fan 2012-12-19
  • 打赏
  • 举报
回复
PC上只能是接近,不精确的。
  • 打赏
  • 举报
回复
标准解决方案应该是任务计划,但是你要求定时精度这么高,可以先用任务计划定时到你要求的时刻之前一点时间,比如早一二十秒,等你的程序启动之后再timeSetEvent设置一个1ms的周期回调,在回调过程中调用GetSystemTimeAsFileTime检测定时点到了没有,到了的话就timeKillEvent,再调用你的函数。
UnkownState 2012-12-19
  • 打赏
  • 举报
回复
http://dearymz.blog.163.com/blog/static/20565742010112882326608/
merkey2002 2012-12-19
  • 打赏
  • 举报
回复
在线程中不停检测时间,检测到指定的时刻,就通知主线程启动那个函数

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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