在windows下能够经过QueryPerformanceFrequency()和QueryPerformanceCounter()等系列函数来实现计时器的功能。ios
根据其函数说明,其精度可以达到微秒级,可是须要硬件中的计时器来支持。至于具体怎么样的硬件可以支持,查了不少资料都没有详细说明;而另一些资料也说明,若是底层硬件不支持,这两个API就会返回相似于GetTickCount()的精度结果。通常状况下能够放心的使用。windows
这里就把本身一直用的计时器分享一下,已经简单将其封装成类的形式,你们能够将其加入到经常使用的工具组件里面,方便使用:函数
#include<iostream> #include<Windows.h> using namespace std; class CTimer { public: CTimer(void); ~CTimer(void); int time_in(); double time_out(); private: LARGE_INTEGER litmp; LONGLONG qt1, qt2; double dft, dff, dfm; }; CTimer::CTimer(void) { } CTimer::~CTimer(void) { } int CTimer::time_in() { QueryPerformanceFrequency(&litmp);//得到时钟频率 dff = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp);//得到初始值 qt1 = litmp.QuadPart; return 1; } double CTimer::time_out() { QueryPerformanceCounter(&litmp);//得到终止值 qt2 = litmp.QuadPart; dfm = (double)(qt2 - qt1); dft = dfm / dff;//得到对应的时间值 return dft; } int main() { CTimer timer; timer.time_in(); for (size_t i = 0; i < 10000; i++) { const size_t num = 200 * 1024; char *tmp = new char[num]; memset(tmp, 0, num); delete[] tmp; tmp = nullptr; } cout<<"申请堆耗时:"<<timer.time_out()<<endl; timer.time_in(); for (size_t i = 0; i < 10000; i++) { const size_t num = 200 * 1024; char tmp[num]; memset(tmp, 0, num); } cout << "申请栈耗时:" << timer.time_out() << endl; return 0; }
这里的例子分别计算了申请堆和申请栈的时间,其运行结果以下:
工具