#include <windows.h>
double PCFreq = 0.0;
__int64 CounterStart = 0;
void StartCounter()
{
LARGE_INTEGER li;
if(!QueryPerformanceFrequency(&li))
cout << "QueryPerformanceFrequency failed!\n";
PCFreq = double(li.QuadPart)/1000.0;
QueryPerformanceCounter(&li);
CounterStart = li.QuadPart;
}
double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double(li.QuadPart-CounterStart)/PCFreq;
}
int main()
{
StartCounter();
Sleep(1000);
cout << GetCounter() <<"\n";
return 0;
}
该程序应输出接近1000的数字(Windows睡眠不是那么准确,但是应该像999)。
该StartCounter()
函数记录性能计数器在CounterStart
变量中具有的滴答声数量。该GetCounter()
函数返回自StartCounter()
上次被调用为double 以来的毫秒数,因此,如果GetCounter()
返回0.001,则自StartCounter()
调用以来约为1微秒。
如果要让计时器使用秒数,请更改
PCFreq = double(li.QuadPart)/1000.0;
至
PCFreq = double(li.QuadPart);
或者如果您想要微秒,则使用
PCFreq = double(li.QuadPart)/1000000.0;
但是实际上,这是关于便利性的,因为它返回了两倍。