Windows CPU参数

来源:互联网 发布:淘宝做的最好的店铺 编辑:程序博客网 时间:2024/05/22 03:22

1. QueryPerformanceFrequency() & QueryPerformaceCounter()

Windows9X中使用的高精度计时器,但需要机器硬件支持。

原型如下:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);


数据类型LARGEINTEGER既可以是一个作为8字节长的整数,也可以是作为两个4字节长的整数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:

typeef union _ LARGE_INTEGER

{
   struct
   {
      DWORD LowPart;
      LONG HighPart;
   };
   LONGLONG QuadPart;
} LARGE_INTEGER;


在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。测试函数SLEEP(100)的精确持续时间方法:
  LARGE_INTEGER litmp;
  LONGLONG qt1,qt2;
  double dft,dff,dfm;
  QueryPerformanceFrequency(&litmp);//获得时钟频率
  dff=(double)litmp.QuadPart;
  QueryPerformanceCounter(&litmp);//获得初始值
  qt1=litmp.QuadPart;Sleep(100);
  QueryPerformanceCounter(&litmp);//获得终止值
  qt2=litmp.QuadPart;
  dfm=(double)(qt2-qt1);
  dft=dfm/dff;//获得对应的时间值

需要注意的是DFT计算的结果单位是秒。


2. timeGetSystemTime()

The timeGetSystemTime function retrieves the system time, in milliseconds. The system time is the time elapsedsince Windows was started

声明如下:

MMRESULT timeGetSystemTime(  LPMMTIME pmmt,  UINT cbmmt);

typedef struct mmtime_tag {  UINT  wType;  union {    DWORD  ms;    DWORD  sample;    DWORD  cb;    DWORD  ticks;    struct {      BYTE hour;      BYTE min;      BYTE sec;      BYTE frame;      BYTE fps;      BYTE dummy;      BYTE pad[2];    } smpte;    struct {      DWORD songptrpos;    } midi;  } u;} MMTIME, *PMMTIME, *LPMMTIME;

3.PerformanceCounter()
引用:http://www.cnblogs.com/shanyou/archive/2010/12/23/1914736.html

4.GetCPUTickCount()
应用RDTSC指令获取当前CPU运行周期数。

5.RDTSC实现纳秒级别计时
http://blog.csdn.net/leng_que/article/details/4581892
  
 总体参考:http://www.byywee.com/page/M0/S734/734586.html

原创粉丝点击