Windows中一些关于CPU\系统效能的知识——编程之美1.1

Perfmon是从Windows NT开始就包含在Windows管理工具组中的专业检测工具之一,可获取有关操作系统、应用程序和硬件的各种效能计数器(perf counter)。perfmon的用法相当直接,只要选择检测的对象(如处理器、RAM或硬盘),然后选择效能计数器(比如监视物理磁盘的平均队列长度);

Micorsoft .NETFramework提供了PerformanceCounter这一对象,可以方便地得到当前各种性能数据,包括CPU的使用率;

几个API函数

1、void Sleep(DWORD dwMilliseconds);使调用线程暂停自己的运行,直到指定的时间间隔过去为止;

2、DWORD WaitForSingleObject(HANDLEhHandle,DWORD dwMilliseconds);

    hHandle:所请求对象的句柄。如果该对象处于无信号状态,即未通知的状态,则该函数就会一直等待,这样就暂停线程的执行;

    dwMilliseconds:指定等待的时间间隔,以毫秒为单位。如果指定的时间间隔已过,即使所请求的对象仍处于无信号状态,WaitForSingleObject函数也会返回;

3、DWORDGetTickCount(void);操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,并非实时发送,而是由系统每18ms发送一 次,因此其最小精度为18ms;

4、BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)/BOOLQueryPerformanceCounter (LARGE_INTEGER *lpCount):要求计算机从硬件上支持高精度定时器,定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间;

5、timeGetSystemTime():函数返回系统时间,(毫秒)。这里的系统时间是指自从系统启动时到调用该函数时的时间间隔;

6、PerformanceCounter——Microsoft .NET Framework 提供的对象,可以方便得得到当前各种性能数据,包括CPU的使用率;

7、GetProcessorInfo()/SetThreadAffinityMask():GetProcessorInfo()获得多处理器的信息,SetThreadAffinityMask()指定进程在哪一个处理器上运行;

8、GetCPUTickCount():不过现代计算机CPU的频率会随着负载而变化,所以没大有必要使用该函数,使用getTickCount就足够了

X86平台定义函数(RDTDC指令后去当前CPU核心运行周期数):

inline _int64 GetCPUTickCount()

{

      _asm

     {

           rdtsc;

     }

}

在X64平台上定义:

#define  GetCPUTickCount() _rdtsc()

 

 

你可能感兴趣的:(C\C++,编程之美,windows,cpu)