#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が返される場合は、呼び出されてから約1マイクロ秒StartCounter()
です。
タイマーに秒を使用させたい場合は、変更してください
PCFreq = double(li.QuadPart)/1000.0;
に
PCFreq = double(li.QuadPart);
または、マイクロ秒が必要な場合は、
PCFreq = double(li.QuadPart)/1000000.0;
しかし、それはdoubleを返すので、本当に便利です。