我最近决定需要将 Timer 类的使用毫秒改为微秒,经过一番研究后,我认为 QueryPerformanceCounter 可能是我最安全的选择。 (警告Boost::Posix
它可能无法在 Win32 API 上运行,这让我有点失望)。但是,我不太确定如何实施它。
我正在做的就是打电话GetTicks()
我正在使用 esque 函数并将其分配给计时器startingTicks
多变的。然后为了找到经过的时间量,我只需从函数的返回值中减去startingTicks
,当我重置计时器时,我只需再次调用该函数并为其分配startingTicks。不幸的是,从我看到的代码来看,它并不像调用那么简单QueryPerformanceCounter()
,而且我不确定我应该传递什么作为它的参数。
#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 sleep 不太准确,但应该类似于 999)。
The StartCounter()
函数记录性能计数器的滴答数CounterStart
多变的。这GetCounter()
函数返回自此以来的毫秒数StartCounter()
最后被称为双精度,所以如果GetCounter()
返回 0.001 那么自此以来已经过去了大约 1 微秒StartCounter()
被称为。
如果你想让计时器使用秒,那么改变
PCFreq = double(li.QuadPart)/1000.0;
to
PCFreq = double(li.QuadPart);
或者如果你想要微秒然后使用
PCFreq = double(li.QuadPart)/1000000.0;
但实际上它是为了方便,因为它返回一个双精度值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)