using System.data;
using System.threading;
using System.text;
class program{
static void main()
{int i=0;
while(true)
{i++;
thread.sleep(32);
console.writeline(DateTime.now.millonsecond);
if(i>=100)
{Console.readkey();}
}
}
}
输出的数之间差不是32而是47,31以前的还准确。99的时候是110.请问问题出在哪里,谁能给出一个精确的定时器,毫秒级的。我试了System.windows.timer,System.timer.timer;System.threading.timer;都不可以。不够精确,总有误差,难道是我的程序执行的时间太长,超过了定时的间隔吗?

解决方案 »

  1.   

    thread.sleep(32); 
    停止32毫秒有什么意义吗?试试把 32改成1000准确不准确
      

  2.   

    有误差应该是正常的,因为执行
    onsole.writeline(DateTime.now.millonsecond); 
    也是需要时间的。
    这在物理上有个术语叫做“测不准原理”
      

  3.   

    值比较小毫秒没多大意义,如果要处理毫秒级别的运算,请使用API。
      

  4.   

    Thread休眠结束后不一定能够立即得到cpu的控制权?所以你的代码还是不能执行,也就打印不出32了。
      

  5.   

    CPU有基本时间戳的   一般来说完成一个基本任务需要10mS,也就是精度最多到10ms 不可能再低了
      

  6.   

    所以在高精度中Sleep(32)是无意义的  
      

  7.   

    用System.Timers 名称空间下的 Timer
      

  8.   

    另起1线程
    int tmp=Environmnet.TickCont;
    while(true)
    {
       tmp=Environmnet.TickCont-tmp;
       if(tmp>37)
       {
         Envent();
         break;
       }
    }
      

  9.   

    Windows系统时钟的精度是15-50毫秒,以前有几个帖子说过好几次了...就是说XP以上的系统在大约15毫秒内时间刻度是一样的...32毫秒实际上是32±15毫秒,你运气好所以是47毫秒...需要更高精度用用CPU晶振自己计算...翻翻以前的精华帖吧,记得有一个讨论过...
      

  10.   

    经过半个月的总结得出结论,window的计时最小是以15ms做为单位的,以15ms递增的,所以可以有15,30,45,15倍数的精度,而且是在上下浮动,设为30可能是15,可能是45(主要看cpu忙不忙)。而其他精度都是可忘不可及的。这点多任务的高级cpu没有单片机好,但是时间上好像有个叫tick的属性,是一个好几位的数,不知道这个通过控制这个来控制精度。