头文件<windows.h>
LARGE_INTEGER nFreq;//LARGE_INTEGER在64位系统中是LONGLONG,在32位系统中是高低两个32位的LONG,在windows.h中通过预编译宏作定义
LARGE_INTEGER nBeginTime;//记录开始时的计数器的值
LARGE_INTEGER nEndTime;//记录停止时的计数器的值
double time;
QueryPerformanceFrequency(&nFreq);//获取系统时钟频率
QueryPerformanceCounter(&nBeginTime);//获取开始时刻计数值
//To Do:
QueryPerformanceCounter(&nEndTime);//获取停止时刻计数值
time = (double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;//(开始-停止)/频率即为秒数,精确到小数点后6位
使用时发现上述方法与CPU的频率稳定性有关,在计时时间较长的情况下,上述计时方法会出现计时不稳定的结果,
因为CPU频率是会变化的,intel的睿频技术甚至还会让cpu的变化幅度大幅增加。
因此更推荐使用C++11标准库中的chrono库来实现更精确的微妙级计时
#include <chrono>
using namespace std;
using namespace chrono;
auto start = system_clock::now();
// do something...
auto end = system_clock::now();
auto duration = duration_cast<microseconds>(end - start);
cout << "花费了"
<< double(duration.count()) * microseconds::period::num / microseconds::period::den
<< "秒" << endl;