你具体是怎么得出这个结果的?
QueryPerformanceCounter的精度是相当高的了,另外也可以用CreateWaitableTimer、SetWaitableTimer来定时,但Windows不是实时系统,很可能时间到了但处理器还在执行其它线程,所以没法保证1ms的精度,通过设置线程优先级可以尽可能地排除其它线程的干扰。

解决方案 »

  1.   

    两次获取QueryPerformanceCounter,减差得到count之差,除以频率,得到时间。即
    获取Counter1
    while(TRUE)
    {
       获取Counter2   xxx i++ xxx   do
       {
          获取Counter3
          time=(count3-cout2)/frq
        }while(time<interval)//实现定时器      获取Counter4
         if(Counter4-Counter1的时间>1s)
         {
           TRACE("i=%d",i);
          }
    )
      

  2.   

    这就是我上面说的原因了,因为Windows系统中同时有很多线程在运行,在你的程序执行过程中,随时可能发生线程切换,等到处理器回来继续运行你的线程的时候,已经经过了一段时间,所以有时time可能比interval要大出很多,很有可能大于1ms。在Windows系统中(CPU资源充足的时候)可以设法让定时器在长时间运行过程中的平均触发周期为1ms,但无法确保其触发时间精确到1ms。
      

  3.   

    Windows下低于1MS,精确很差。毕竟Windows不是实时系统。