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


在cmos中断未到来时,cpu资源是否其它的程序占用呢?
LIUTANG
驱动大牛
驱动大牛
  • 注册日期2001-03-30
  • 最后登录2020-12-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望58点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
  • 社区居民
35楼#
发布于:2002-10-28 21:33
好像有方法可以使用硬件时钟中断,举例来说,比如你有一块数据采集卡,需要很高的精度,这时卡上可能会有一个时钟芯片,产生精度很高的时钟,你或许可以使用这一时钟中断,不过小弟没有研究过,在这里板门弄斧了。
上一页 下一页
游客

返回顶部