有关了解当前线程、进程、系统效能的API

Sleep()—让当前线程停下来

Sleep函数可以使计算机程序(进程,任务或线程)进入休眠,使其在一段时间内处于非活动状态。当函数设定的计时器到期,或者接收到信号、程序发生中断都会导致程序继续执行。

1
2
3
4
在Windows系统中:
Sleep(2*1000); //sleep for 2 seconds
在Unix系统中:
sleep(2); //sleep for 2 seconds

WaitForSingleObject()—自己停下来,等待某个事件发生

GetTickCount()

GetTickCount是一种函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。

常常用来判断某个方法执行的时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//代替time函数来初始化随机数生成器
#include <iostream>
#include <windows.h>
#include <WinBase.h>
#include <ctime>
using namespace std;
int main()
{
int i, k, r;
for (i = 0; i < 10; i++)
{
srand (GetTickCount());
cout<<endl;
for (k = 0; k < 5; k++)
{
r = rand ();
cout<<r<<endl;
}
}
return 0;
}

QueryPerformanceFrequency()、QueryPerformanceCounter()—访问到精度更高的CPU数据

QueryPerformanceFrequency是操作系统的性能统计分辨率,也就是每秒钟统计多少次的意思。 性能统计频率和应用程序性能没有关系。

QueryPerformanceCounter 是系统性能统计计数器,表示统计了多少次,除以QueryPerformanceFrequency,得到系统运行时间(秒数)。

QueryPerformanceCounter2-QueryPerformanceCounter1,得到高精度(微秒级,=1/QueryPerformanceFrequency秒)的时间差,常用于winddows高精度计时。

timeGetSystemTime()—另一个得到高精度时间的方法

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

PerformanceCounter()—效能计数器

GetProcessorInfo()/SetThreadAffinityMask()—遇到多核的问题时候更好地控制CPU

GetCPUTickCount()—得到CPU核心运行周期数

让CPU占用率曲线听你指挥

  1. CPU占用率固定在50%,为一条直线

  2. CPU占用率为一条直线,具体占用率由命令行参数决定(参数范围1-100)

  3. CPU占用率状态是一个正弦曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const DWORD busyTime = 10; //10ms
const DWORD int idleTime = busyTime; //same ratio will lead to 50% cpu usage

Int64 startTime = 0;

while(true)
{
DWORD startTime = GetTickCount();
//busy loop
while((GetTickCount() - startTime) <= busyTime)
;

//idle loop
Sleep(idleTime);
}
Donate? comment?