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

时间:2021-09-20 21:22:32

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

一、前言

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

二、Linux下精确至毫秒

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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下精确至毫秒

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#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下精确至微秒

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//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 ;
}

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

原文链接:http://blog.csdn.net/ap1005834/article/details/53419647