C++实现统计代码运行时间计时器的简单实例

C++实现统计代码运行时间计时器的简单实例

一、前言

这里记下从网上找到的一些自己比较常用的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 ; } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

希望有一天,自己也像他们一样,踩着单车上路,

C++实现统计代码运行时间计时器的简单实例

相关文章:

你感兴趣的文章:

标签云: