Windows下实现高精度定时器

WizardK 2010-02-01 05:46:21
SetTime、Sleep、COleDateTime+COleDateTimeSpan、GetTickCount、timeGetTime、timeSetEvent、QueryPerformanceFrequency+QueryPerformanceCounter等等均不能满足要求,受系统影响很大,长时间测试结果,偏差(单步误差和累积误差)太大。

除了引入外部硬时钟(定时中断),还有什么其他的办法?大家给点建议。
...全文
2473 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
bamboogz99 2011-12-12
  • 打赏
  • 举报
回复
mark一下,也想知道WIndows最高定时精度.
czcwzw 2011-09-23
  • 打赏
  • 举报
回复
mark
akcw007 2010-02-09
  • 打赏
  • 举报
回复
引用 21 楼 wizardk 的回复:
OK,我来详细介绍下我的意思:

首先,众所周知,WINDOWS不是一个实时的操作系统,更不是一个硬实时的操作系统,所以普通的应用级定时根本没有实时性保证。也许大家随便挑一个定时器就可以做到貌似准确的定时,但是这种精度要求只是能够满足低精度的应用而已,当然,如果有高实时性的要求,第一想到的就是换平台了(RTLINUX\VXWORKS...)。

但是我知道一家德国公司,做了一个KW软件,也有针对WINDOWS的版本,他保证最小定时精度为1MS,单周期定时精度小于50NS,没有累积误差。所以我想深究一下,他是如何实现的。

大家集思广益,有什么想法都说说,这不是无理取闹,既然有人都做出来了,那么如果能搞清楚还是很有帮助的。


回到DOS时代吧,不要WINDOWS消息循环,不要API,不要DDK。。。。
不对,不用回到DOS时代,回到WIN95时代就够了
你妹的特盗不 2010-02-08
  • 打赏
  • 举报
回复
如果我没有记错的法,电脑的主板(台式机),上面都有一个硬件芯片,那个就是Clock键,我见过的有ics的
这个他的时钟是很准,也是硬件实现的,希望对楼主有帮助

如果你搞定了,可以CC份给我不啊
你妹的特盗不 2010-02-08
  • 打赏
  • 举报
回复
最精确的那就根据CPU的频率来做了,CPU频率的最小单位时间是多少,就只能精确到那么小吧
WizardK 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 cnzdgs 的回复:]
引用 45 楼 wizardk 的回复:
他的环境下是不允许使用外部中断的。内核程序接管定时中断后,那么WINDOWS不会受任何影响?

接管中断后,先执行自己的代码,然后再继续执行系统原本的代码,只要自己的代码消耗的时间不多,可以认为对系统是没有影响的。
[/Quote]

我试试,谢谢。
dong364 2010-02-04
  • 打赏
  • 举报
回复
同步时间服务器
cnzdgs 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 wizardk 的回复:]
他的环境下是不允许使用外部中断的。内核程序接管定时中断后,那么WINDOWS不会受任何影响?
[/Quote]
接管中断后,先执行自己的代码,然后再继续执行系统原本的代码,只要自己的代码消耗的时间不多,可以认为对系统是没有影响的。
WizardK 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 cnzdgs 的回复:]
引用 29 楼 wizardk 的回复:
这个是一个包括调度内核和开发环境的一套工具,调度内核需要基于WINDDK,配置后编译。定时就是用来控制定时任务。他的手册上对性能描述是这样的,但是我还没有环境进行实测,不过他们说实测的方式就是做一个定时任务,然后定时从板上找一个I/O口做开关量反转输出,用示波器进行测量,以衡量定时的单步响应时间偏差。

我一直怀疑他的实时性,但人外有人,他这套东西在德国有过实际应用,所以想深究下。

内核程序可以通过接管定时中断的方式来实现很高的精度,不过90ns有些夸张,如果其它某个驱动程序把中断稍稍屏蔽一下,他的程序就不能准时执行了。
[/Quote]

他的环境下是不允许使用外部中断的。内核程序接管定时中断后,那么WINDOWS不会受任何影响?
足球中国 2010-02-03
  • 打赏
  • 举报
回复
每天七点对新闻联播/
ldw466 2010-02-03
  • 打赏
  • 举报
回复
O
芯艺 2010-02-03
  • 打赏
  • 举报
回复
关注中。。。
这不是鸭头 2010-02-03
  • 打赏
  • 举报
回复
windows下难度太大。QueryPerformanceCounter出来的算是比较准的了...
jyh_baoding 2010-02-03
  • 打赏
  • 举报
回复
QueryPerformanceCounter 如果不能满足,只能是你的硬件太差了
Henry8484 2010-02-03
  • 打赏
  • 举报
回复
学习一下,帮DING~~
cnzdgs 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 wizardk 的回复:]
这个是一个包括调度内核和开发环境的一套工具,调度内核需要基于WINDDK,配置后编译。定时就是用来控制定时任务。他的手册上对性能描述是这样的,但是我还没有环境进行实测,不过他们说实测的方式就是做一个定时任务,然后定时从板上找一个I/O口做开关量反转输出,用示波器进行测量,以衡量定时的单步响应时间偏差。

我一直怀疑他的实时性,但人外有人,他这套东西在德国有过实际应用,所以想深究下。
[/Quote]
内核程序可以通过接管定时中断的方式来实现很高的精度,不过90ns有些夸张,如果其它某个驱动程序把中断稍稍屏蔽一下,他的程序就不能准时执行了。
jameshooo 2010-02-02
  • 打赏
  • 举报
回复
电信级设备的时钟精度都达不到你的要求,更别说台式电脑了,需要专业设备(比如铯原子钟)提供高精度时钟,但这种玩意恐怕只有在天文、GPS高精度授时等场合才用得上。楼主干脆抛弃电脑算了,这是强人所难。
haifong2 2010-02-02
  • 打赏
  • 举报
回复
Windows是一个多任务操作系统,我们必须清楚正在运行的线程随时都有可能停下来,绘别的线程让路,就算有很精确的时间获取方法,有可能会错过机会.
wangk 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wizardk 的回复:]

但是我知道一家德国公司,做了一个KW软件,也有针对WINDOWS的版本,他保证最小定时精度为1MS,单周期定时精度小于50NS,没有累积误差。所以我想深究一下,他是如何实现的。

大家集思广益,有什么想法都说说,这不是无理取闹,既然有人都做出来了,那么如果能搞清楚还是很有帮助的。
[/Quote]

有保护么?需要特定硬件支持吗?需要网络支持吗(比如说类似授时服务)

如果可以不妨复制一份进行逆向工程,看看它是怎么实现的。我估计用驱动抢高优先资源的概率比较高。
「已注销」 2010-02-02
  • 打赏
  • 举报
回复
太难了

JF
加载更多回复(33)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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