较高精度的定时器
约是微秒级的吧
利用 cpu 的滴答频率的吧
原理是获取 2 次的滴答差,然后换算成时间差
丢上头文件
#include <Windows.h>
class LrrCounter {
private:
LrrCounter() = delete;
~LrrCounter() = delete;
public:
/* 【1】获取结果 */
static double result_s() { return m_value / 1000000.0; }
static double result_ms() { return m_value / 1000.0; }
static double result_us() { return m_value / 1.0; }
/* 【2】开始 */
static void start() {
m_value = 0;
QueryPerformanceFrequency(&m_freq);
QueryPerformanceCounter(&m_begin);
}
/* 【3】停止 */
static void stop() {
QueryPerformanceCounter(&m_end);
m_value = ((double)m_end.QuadPart - (double)m_begin.QuadPart)*1000000 / (double)m_freq.QuadPart;
}
private:
static double m_value;
static LARGE_INTEGER m_freq;
static LARGE_INTEGER m_begin;
static LARGE_INTEGER m_end;
};
double LrrCounter::m_value = 0;
LARGE_INTEGER LrrCounter::m_freq;
LARGE_INTEGER LrrCounter::m_begin;
LARGE_INTEGER LrrCounter::m_end;
如何使用?
LrrCounter::start();
/* 你要测试执行代码的地方 */
LrrCounter::stop();
printf("%fs\n", LrrCounter::result_s());
测试一下 Sleep() 函数
int main(int argc, char** argv)
{
for (int i = 0; i < 10; ++i) {
LrrCounter::start();
Sleep(1000);
LrrCounter::stop();
printf("%fs\n", LrrCounter::result_s());
}
}
调试结果可以看到:这里测试了10次,Sleep() 函数还是有点误差滴。
结论:用这个精度应该算高一点吧。