zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3135回复:35

windows下,有没有方法可以实现1ms或更小的精确定时

楼主#
更多 发布于:2002-10-14 10:00
霍霍

最新喜欢:

changjtchangj...
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
LIUTANG
驱动大牛
驱动大牛
  • 注册日期2001-03-30
  • 最后登录2020-12-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望58点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-10-28 21:33
好像有方法可以使用硬件时钟中断,举例来说,比如你有一块数据采集卡,需要很高的精度,这时卡上可能会有一个时钟芯片,产生精度很高的时钟,你或许可以使用这一时钟中断,不过小弟没有研究过,在这里板门弄斧了。
zhoujie7592
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-27 09:56
我 也正在研究这个问题
我是用cmos中断做的,现在碰到了一点问题,有兴趣我们共同研究.


在cmos中断未到来时,cpu资源是否其它的程序占用呢?
luoxiaolin
驱动牛犊
驱动牛犊
  • 注册日期2002-05-25
  • 最后登录2003-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-22 11:50
我 也正在研究这个问题
我是用cmos中断做的,现在碰到了一点问题,有兴趣我们共同研究.
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-10-21 14:39
直接修改8254的计数值,改写IRQ0的IDT,自己拦截时钟中断,可以达到20微秒级的时间间隔。我现在就在做这个东西,我试过的最小值是14微秒
易水
wanmintian
驱动牛犊
驱动牛犊
  • 注册日期2002-04-09
  • 最后登录2006-03-27
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-20 16:45
如果是做中断型的触发,可以通过0层的click计数实现,要是想实时传送,恐怕要设定你的中断优先级别,让这个计时中断在次最高级别,试试!
guard2002
驱动中牛
驱动中牛
  • 注册日期2002-05-21
  • 最后登录2017-03-07
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望65点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-10-20 15:00
使用楼上方法系统占用很大,有没有其他方法呢
LIUTANG
驱动大牛
驱动大牛
  • 注册日期2001-03-30
  • 最后登录2020-12-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望58点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-10-19 22:42
配合使用QueryPerformanceCounter和QueryPerformanceFrequency函数能获得很高的计时精度。前者是取CPU启动到现在的时间,后者是CPU频率。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-17 14:24
时钟分辨率是可更改的,timeBeginPeriod就是通过NativeAPI修改这一参数。默认情况下时钟中断10ms发生一次,最小可改到1ms。
媒体定时器对精度不特别高的任务可以胜任,但它的多线程加事件机制能力也是颇为有限的,特别是受高优先级线程的影响很大。
时间计数是较准确的,系统会用TSC修正其值。
低于1ms的定时自然可以,需要硬中断源,最容易想到的就是系统时钟源与cmos实时钟源。个中区别、适用范围自己想想吧,很多人用过的。
guard2002
驱动中牛
驱动中牛
  • 注册日期2002-05-21
  • 最后登录2017-03-07
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望65点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-10-17 12:54
正常运行时多媒体定时器为1ms,而普通定时器为10ms(nt/2k)
系统其他会影响到该定时器
cn18799
驱动老牛
驱动老牛
  • 注册日期2001-11-17
  • 最后登录2010-04-16
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-10-15 20:39
1\\ 在windows下想达到毫秒级,最好的方法是让你的程序运行在RING-0级,并且接管时钟中断;
原因是:

  windows 是多任务,运行在RING 3 级程序的线程之间的切换,就不可能让你获得1毫秒的时钟间隔。 曾经在 win 98 上无意间做过一次,现成的转换频率是 200/秒 (说明:当时我的计算机开的程序还不多,否则会更差)
  同时,高优先级的程序可以随时介入你的时间处理进程,若他的处理时间大于1毫秒,是否你的程序在很大程度上会失去意义。


同意,我说做驱动就是为了在 0 级。
[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.driverdevelop.com/forum/upload/cn18799/2002-09-28_logo.gif[/img]
guoj
驱动小牛
驱动小牛
  • 注册日期2001-04-02
  • 最后登录2014-02-14
  • 粉丝3
  • 关注0
  • 积分15分
  • 威望55点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-10-15 17:27
1\\ 在windows下想达到毫秒级,最好的方法是让你的程序运行在RING-0级,并且接管时钟中断;
原因是:

  windows 是多任务,运行在RING 3 级程序的线程之间的切换,就不可能让你获得1毫秒的时钟间隔。 曾经在 win 98 上无意间做过一次,现成的转换频率是 200/秒 (说明:当时我的计算机开的程序还不多,否则会更差)
  同时,高优先级的程序可以随时介入你的时间处理进程,若他的处理时间大于1毫秒,是否你的程序在很大程度上会失去意义。

guoj
cn18799
驱动老牛
驱动老牛
  • 注册日期2001-11-17
  • 最后登录2010-04-16
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-10-14 13:38
系统时间当然是 windows 自己计的,我是说 click 数。
你要不把系统时间向前改,再看看 click 数会不会减小。
[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.driverdevelop.com/forum/upload/cn18799/2002-09-28_logo.gif[/img]
cn18799
驱动老牛
驱动老牛
  • 注册日期2001-11-17
  • 最后登录2010-04-16
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-10-14 13:34
设了。
[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.driverdevelop.com/forum/upload/cn18799/2002-09-28_logo.gif[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-10-14 13:33
至于 windows 里毫秒级的 click 数,我觉得应该是从硬件实时时钟里读的,不是 windows 自己计的。

[编辑 -  10/14/02 by  cn18799]

不,应该是Windows自己计数,不信看,当SoftIce弹出时,系统时间会变慢。
在你做过的里面用timeBeginPeriod设精度了吗?
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
cn18799
驱动老牛
驱动老牛
  • 注册日期2001-11-17
  • 最后登录2010-04-16
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-10-14 13:30
至于 windows 里毫秒级的 click 数,我觉得应该是从硬件实时时钟里读的,不是 windows 自己计的。

[编辑 -  10/14/02 by  cn18799]
[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.driverdevelop.com/forum/upload/cn18799/2002-09-28_logo.gif[/img]
cn18799
驱动老牛
驱动老牛
  • 注册日期2001-11-17
  • 最后登录2010-04-16
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-10-14 13:24
我说过了,多媒体定时器受会影响的,你定为 1 ms,但受影响时,它的定时间隔会在 1 到 几十甚至上百 ms 之间。

每秒 60 帧的视频,也不需要 1 ms 的精度。

[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.driverdevelop.com/forum/upload/cn18799/2002-09-28_logo.gif[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-10-14 13:16
他要 1ms 的,我干吗要做 0.1ms 的?

那多媒体还不够???
够了
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-10-14 13:16
好呀好呀
继续,

我喜欢

 :D
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
cn18799
驱动老牛
驱动老牛
  • 注册日期2001-11-17
  • 最后登录2010-04-16
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-10-14 13:15
他要 1ms 的,我干吗要做 0.1ms 的?
[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.driverdevelop.com/forum/upload/cn18799/2002-09-28_logo.gif[/img]
上一页
游客

返回顶部