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;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值