C++统计代码运行时间计时器

来源:互联网 发布:php eclipse 编辑:程序博客网 时间:2024/05/16 09:57

一、前言

         这里记下从网上找到的一些自己比较常用的C++计时代码

二、Linux下精确至毫秒

#include <sys/time.h>#include <iostream>#include <time.h>double get_wall_time(){    struct timeval time ;    if (gettimeofday(&time,NULL)){        return 0;    }    return (double)time.tv_sec + (double)time.tv_usec * .000001;}int main(){unsigned int t = 0;double start_time = get_wall_time()while(t++<10e+6);double end_time = get_wall_time()std::cout<<"循环耗时为:"<<end_time-start_time<<"ms";return 0;}

三、Windows下精确至毫秒

#include <windows.h>#include <iostream>int main(){DWORD start, stop;unsigned int t = 0;start = GetTickCount();while (t++ < 10e+6);stop = GetTickCount();printf("time: %lld ms\n", stop - start);return 0;}
试验中,发现貌似getTickCount函数会有10几毫秒的误差,囧。。。

四、Windows下精确至微秒
//MyTimer.h//#ifndef __MyTimer_H__  #define __MyTimer_H__  #include <windows.h>  class MyTimer{private:int _freq;LARGE_INTEGER _begin;LARGE_INTEGER _end;public:long costTime;            // 花费的时间(精确到微秒)  public:MyTimer(){LARGE_INTEGER tmp;QueryPerformanceFrequency(&tmp);//QueryPerformanceFrequency()作用:返回硬件支持的高精度计数器的频率。  _freq = tmp.QuadPart;costTime = 0;}void Start()            // 开始计时  {QueryPerformanceCounter(&_begin);//获得初始值  }void End()                // 结束计时  {QueryPerformanceCounter(&_end);//获得终止值  costTime = (long)((_end.QuadPart - _begin.QuadPart) * 1000000 / _freq);}void Reset()            // 计时清0  {costTime = 0;}};#endif  //main.cpp#include "MyTimer.h"#include <iostream>int main(){MyTimer timer;unsigned int t = 0; timer.Start();while (t++ < 10e+5);timer.End(); std::cout << "耗时为:" << timer.costTime << "us";return 0 ;}
0 0