驱动问题,在windowsXP上可以精确到3.3毫秒计时吗?

解决方案 »

  1.   

    但是不能保证3.3    Windows不是实时系统  
      

  2.   

    谢谢!
    能不能用上windows的时钟中断,完成精确对时到3.3毫秒?
    即使不能,有多高的精度呢?
      

  3.   

    毫秒级还不算苛刻。可以用高精度计数器QueryPerformanceCounter
      

  4.   

    http://blog.csdn.net/supconsupcon/archive/2009/10/05/4633482.aspx这个?
      

  5.   

    精度能达到1000纳秒,驱动下。很多内核函数可用
    但是,Windows不是一个实时系统,我必须提醒下你
      

  6.   

    请问fangchao918628:
    “DPC定时器好像可以到100ns!!”
    怎么用?怎么实现呢?用vc有思路,步骤,或例子吗?谢谢。请问Tr0j4n:
    “Windows不是一个实时系统,我必须提醒下你”
    这是什么意思,是否表示在windows下,一定不能精确到3.3毫秒呢?
      

  7.   

    LARGE_INTEGER begintime;
    void TimeStart()
    {
        QueryPerformanceCounter(&begintime);
    }void TimeDisplay()
    {
        LARGE_INTEGER endtime,freqtime,resulttime;
        QueryPerformanceCounter(&endtime);
        QueryPerformanceFrequency(&freqtime);
        resulttime.QuadPart = (endtime.QuadPart - begintime.QuadPart) * 1000 / freqtime.QuadPart;
        printf("处理时间:%5I64d小时%I64d分%I64d.%03I64d秒",resulttime.QuadPart / 3600000,(resulttime.QuadPart / 60000) % 60,(resulttime.QuadPart /1000) % 60,resulttime.QuadPart % 1000);
    }3毫秒差不多,但是0.1ms的精度危险,虽然数字上可以精确到1us
      

  8.   

    如果要相对准确的也可以用KeStallExecutionProcessor(时间),但是这个会浪费CPU时间,要做到完全的3.3ms好像不可能吧,就像Tr0j4n和ziplj说的一样!
      

  9.   

    这个就KeInitializeDpc初始化DPC
    设置定时器KeSetTimer,
    停止定时器KeCancelTimer
      

  10.   

    你要知道,API的调用也需要时间呀...当你需要精确度不高的时候,API的调用时间完全可以忽略不计。但是你要求精度提高了后,API的调用时间就开始不能忽略了API的调用不是瞬间的,那是一厢情愿。这就是为什么它不是“实时系统”的原因
      

  11.   

        //开始获取一次硬件时钟
        LARGE_INTEGER nStartCounter;   
        QueryPerformanceCounter(&nStartCounter);
        LARGE_INTEGER nFrequency;
    QueryPerformanceFrequency(&nFrequency); //Function();    //函数结束获取一次硬件时钟,取两者之差
        LARGE_INTEGER nStopCounter;
        QueryPerformanceCounter(&nStopCounter);
        double nTime = 1000 * (nStopCounter.QuadPart - nStartCounter.QuadPart) / nFrequency.QuadPart;
    printf("\n测试时间为%f 秒",nTime/1000 );
    你可以试一下这个