dfFreq=(double)litmp.QuadPart;   while(true)
  {   QueryPerformanceCounter(&litmp);
      QPart1 = litmp.QuadPart;
      N1=QPart1;      QueryPerformanceCounter(&litmp);  
      QPart2 = litmp.QuadPart;    while(((double)(QPart2-QPart1))<0.8*0.001*dfFreq)//根据(QPart2-QPart1)/f=t的公式=>(QPart2-QPart1)=f*t   {
              QPart1=QPart2;
              QueryPerformanceCounter(&litmp);  
              QPart2 = litmp.QuadPart;
              N2=QPart2;
  }
  
  break;
  }    dfMinus=(double)(N2-N1);
   dfTim = (dfMinus / dfFreq)*1000000; 
   
   _itoa(dfTim,buffer,10);//convert integer to string
   AfxMessageBox(buffer,IDCANCEL,0);我根据(QPart2-QPart1)/f=t的公式=>(QPart2-QPart1)=f*t
现在我取t=0.8ms 
这个公式我最后的dfTim应该和0.8ms没什么很大的差距。
但我得到的结果总和0.8ms相差不多10倍,为什么 请高手指点。。
(急。)

解决方案 »

  1.   

    可以精确到0.000001秒看看下面的代码,你在VC里运行试试:)#include "stdafx.h"
    #include "windows.h"
    int main(int argc, char* argv[])
    {
    LARGE_INTEGER countstart;
    LARGE_INTEGER countend;
    __int64 timediff;
    LARGE_INTEGER frequent;
    QueryPerformanceCounter( &countstart);
    printf("Hello World!\n");
    printf("Hello World!\n");
    printf("Hello World!\n");
    QueryPerformanceCounter( &countend);
    timediff = (__int64)countend.QuadPart-(__int64)countstart.QuadPart;
    QueryPerformanceFrequency(&frequent);
    double dsec = (double)timediff/(double)frequent.QuadPart;
    printf("elapsed time :%f(second)\n",dsec);
    return 0;
    }
      

  2.   

    多任务的问题。Windows本身就不可能达到实时。
    你可以提高进程和线程的优先级试试。
      

  3.   

    我的代码可以精确到5~8个us(微秒)
    就是不知道怎么通过循环达到我要的0.8ms(毫秒),因为通过公式计算的误差太大。只能自己写一定的参数进去。
    但写的参数换到别的机器上肯定要变,事实上系统发出去,就根本没有办法知道该用什么参数,所以我很苦恼请高手救命
      

  4.   

    直接操作8254可以达到0.8us精度,但最小时间间隔必须在16us以上