#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 (режим сна не такой точный, но он должен быть как 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;
Но на самом деле речь идет об удобстве, поскольку возвращает двойное число.