20楼#
发布于:2002-10-14 13:24
我说过了,多媒体定时器受会影响的,你定为 1 ms,但受影响时,它的定时间隔会在 1 到 几十甚至上百 ms 之间。
每秒 60 帧的视频,也不需要 1 ms 的精度。 |
|
|
21楼#
发布于:2002-10-14 13:30
至于 windows 里毫秒级的 click 数,我觉得应该是从硬件实时时钟里读的,不是 windows 自己计的。
[编辑 - 10/14/02 by cn18799] |
|
|
22楼#
发布于:2002-10-14 13:33
至于 windows 里毫秒级的 click 数,我觉得应该是从硬件实时时钟里读的,不是 windows 自己计的。 不,应该是Windows自己计数,不信看,当SoftIce弹出时,系统时间会变慢。 在你做过的里面用timeBeginPeriod设精度了吗? |
|
|
23楼#
发布于:2002-10-14 13:34
设了。
|
|
|
24楼#
发布于:2002-10-14 13:38
系统时间当然是 windows 自己计的,我是说 click 数。
你要不把系统时间向前改,再看看 click 数会不会减小。 |
|
|
25楼#
发布于:2002-10-15 17:27
1\\ 在windows下想达到毫秒级,最好的方法是让你的程序运行在RING-0级,并且接管时钟中断;
原因是: windows 是多任务,运行在RING 3 级程序的线程之间的切换,就不可能让你获得1毫秒的时钟间隔。 曾经在 win 98 上无意间做过一次,现成的转换频率是 200/秒 (说明:当时我的计算机开的程序还不多,否则会更差) 同时,高优先级的程序可以随时介入你的时间处理进程,若他的处理时间大于1毫秒,是否你的程序在很大程度上会失去意义。 郭 |
|
|
26楼#
发布于:2002-10-15 20:39
1\\ 在windows下想达到毫秒级,最好的方法是让你的程序运行在RING-0级,并且接管时钟中断; 同意,我说做驱动就是为了在 0 级。 |
|
|
27楼#
发布于:2002-10-17 12:54
正常运行时多媒体定时器为1ms,而普通定时器为10ms(nt/2k)
系统其他会影响到该定时器 |
|
28楼#
发布于:2002-10-17 14:24
时钟分辨率是可更改的,timeBeginPeriod就是通过NativeAPI修改这一参数。默认情况下时钟中断10ms发生一次,最小可改到1ms。
媒体定时器对精度不特别高的任务可以胜任,但它的多线程加事件机制能力也是颇为有限的,特别是受高优先级线程的影响很大。 时间计数是较准确的,系统会用TSC修正其值。 低于1ms的定时自然可以,需要硬中断源,最容易想到的就是系统时钟源与cmos实时钟源。个中区别、适用范围自己想想吧,很多人用过的。 |
|
29楼#
发布于:2002-10-19 22:42
配合使用QueryPerformanceCounter和QueryPerformanceFrequency函数能获得很高的计时精度。前者是取CPU启动到现在的时间,后者是CPU频率。
|
|
30楼#
发布于:2002-10-20 15:00
使用楼上方法系统占用很大,有没有其他方法呢
|
|
31楼#
发布于:2002-10-20 16:45
如果是做中断型的触发,可以通过0层的click计数实现,要是想实时传送,恐怕要设定你的中断优先级别,让这个计时中断在次最高级别,试试!
|
|
32楼#
发布于:2002-10-21 14:39
直接修改8254的计数值,改写IRQ0的IDT,自己拦截时钟中断,可以达到20微秒级的时间间隔。我现在就在做这个东西,我试过的最小值是14微秒
|
|
|
33楼#
发布于:2002-10-22 11:50
我 也正在研究这个问题
我是用cmos中断做的,现在碰到了一点问题,有兴趣我们共同研究. |
|
34楼#
发布于:2002-10-27 09:56
我 也正在研究这个问题 在cmos中断未到来时,cpu资源是否其它的程序占用呢? |
|
35楼#
发布于:2002-10-28 21:33
好像有方法可以使用硬件时钟中断,举例来说,比如你有一块数据采集卡,需要很高的精度,这时卡上可能会有一个时钟芯片,产生精度很高的时钟,你或许可以使用这一时钟中断,不过小弟没有研究过,在这里板门弄斧了。
|
|
上一页
下一页