Windows下用C/C++精确到微秒的计时方法

头文件<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;

 
 

猜你喜欢

转载自blog.csdn.net/qq_26341675/article/details/70194851