用多媒体实时计数器,效果应该可以,不过只能达到毫秒级,如果达到微秒级,需要使用实时操作系统才能获得,因为多任务系统的频繁切换会导致即使不准,因此windows的计数器不可能达到微秒级,甚至1ms都是很难达到的(实际上windows多媒体实时计数器并不够精确)

解决方案 »

  1.   

    QueryPerformanceCounter 微秒级的,具体精度用
    QueryPerformanceFrequency可以查到
      

  2.   

    获取指令级别的时间记数器:
    //nLow32,低32位     nHigh32,高32位
    void GetCurrentLowLevelTime(long &nLow32,long &nHigh32)
    {
        _asm __emit 0fh
        _asm __emit 031h
        _asm mov nLow32,eax
        _asm mov nHigh32,edx
    }
      

  3.   

    redpower(常宁) : 你说的有道理, 不过我的代码是应用在一个多线程环境下
    所以我要的是正常工作状况下的统计数值。Wugifer() : 谢谢, 我马上试一下
    jyu1221(天同) : 我知道很多的指令执行的时间并不是相同的,比如mov指令对
    各种操作数所执行的时间都有不同,不知道你所说的计数器得到的数据的单位是?因为这部分代码的效率对整个系统的速度影响巨大, 只好测量一下是否它是瓶颈所在。
    实在不行的话可能只能用汇编来重写了,这又是很大的工作量 :(
      

  4.   

    用 clock (C 语言中的一个标准函数),缺省情况是毫秒级的,也好象可以通过更改  CLOCKS_PER_SEC 来调整,不过具体请看有关的文档。
      

  5.   

    to xiaoya(快乐的人请举手)
    如果你打算测试软件的效率,有专用的工具可以测试,你的测试结果可能不会很准,还是用用工具吧
      

  6.   

    to redpower(常宁) , 我只是测一下我的一段代码执行的速度
    不过我对你所说的工具也很感兴趣,请问是什么工具啊?To Wugifer() : 我用你的方法已经测试出来了, 为5ms。等一下给你分To jyu1221(天同): 这个时钟频率是 外频?主频?还是其他什么频率?不要笑我苯,我对这个东东不大了解  :(