本帖最后由 liuzhoulin 于 2011-10-20 11:48:09 编辑

解决方案 »

  1.   

    sleep本身就不准的!
    用定时器可能会好点!
      

  2.   

    用定时器吧。线程一旦Sleep,就不再被系统调度,直到Sleep的时间以后,才可能被系统调度,至于什么时候会调度到它,取决于操作系统。计时器是系统时钟触发的,应该会好一点。
      

  3.   

    Sleep可以控制到你要求的精度的。你怎么测的时间?
    应该是你的两个时间测量点之间除了Sleep还有别的耗时的操作。
      

  4.   

    上面都说了,sleep前后应该还有其它消耗的
      

  5.   

    用定时器和sleep都可能出现延时不准确的情况,
    用内核对象Event来模拟超时
    HANDLE hEvnet = CreateEvent(NULL,FALSE,FALSE,NULL);
    WaitForSingleObject(hEvent,500)//0.5秒用事件好处不会挂起线程。
      

  6.   

    Windows本来就不是实时操作系统,精确是不可能的,不过只要你的CPU负载没有过高,Sleep的精度达到20ms还是没问题的,你是不是计算时间的方法不对呢?另外,WaitForSingleObject是会挂起线程的。
      

  7.   


    内核对象Event不会超时,请教那本书介绍这个问题比较清楚,想看看。
      

  8.   

    Sleep虽然不准, 误差也在ms级别, 不会差到1秒去, 或者线程被挂起, 或者CPU被其他线程占用100%, 总之不是Sleep的问题
      

  9.   

    定时器精度要区别对待, 如果用WM_TIMER的, 比Sleep精度还差