Choreonoid  1.1
TimeMeasure.h
[詳解]
1 
2 #ifndef CNOID_UTIL_TIME_MEASURE_H_INCLUDED
3 #define CNOID_UTIL_TIME_MEASURE_H_INCLUDED
4 
5 
6 #ifndef __WIN32__
7 
8 #include <sys/time.h>
9 
10 namespace cnoid {
11 
12  class TimeMeasure
13  {
14  struct timeval tv;
15  double time_;
16  double totalTime_;
17  int numCalls;
18 
19  public:
20  inline TimeMeasure() {
21  totalTime_ = 0.0;
22  numCalls = 0;
23  }
24 
25  inline void begin() {
26  gettimeofday(&tv, 0);
27  }
28 
29  inline void end(){
30  double beginTime = tv.tv_sec + (double)tv.tv_usec * 1.0e-6;
31  gettimeofday(&tv, 0);
32  double endTime = tv.tv_sec + (double)tv.tv_usec * 1.0e-6;
33  time_ = endTime - beginTime;
34  totalTime_ += time_;
35  numCalls++;
36  }
37 
38  inline double time() { return time_; }
39  inline double totalTime() { return totalTime_; }
40  inline double avarageTime() { return totalTime_ / numCalls; }
41 
42  };
43 
44 
45 #else
46 #include <windows.h>
47  typedef unsigned __int64 ulonglong;
48 
49  class TimeMeasure
50  {
51  ulonglong iTimerScale;
52  ulonglong beginTime;
53  ulonglong endTime;
54  double time_;
55  double totalTime_;
56  int numCalls;
57 
58  public:
59  inline TimeMeasure() {
60  totalTime_ = 0.0;
61  numCalls = 0;
62  BOOL iDummyBool = QueryPerformanceFrequency ((LARGE_INTEGER *) &iTimerScale);
63  if(!iDummyBool)
64  iTimerScale=1;
65  }
66 
67  inline void begin() {
68  BOOL iDummyBool = QueryPerformanceCounter ((LARGE_INTEGER *) &beginTime);
69  if(!iDummyBool)
70  beginTime=1;
71  }
72 
73  inline void end(){
74  BOOL iDummyBool = QueryPerformanceCounter ((LARGE_INTEGER *) &endTime);
75  if(!iDummyBool)
76  endTime=0;
77  time_ = (double)(endTime - beginTime) / iTimerScale;
78  totalTime_ += time_;
79  numCalls++;
80  }
81  inline double time() { return time_; }
82  inline double totalTime() { return totalTime_; }
83  inline double avarageTime() { return totalTime_ / numCalls; }
84  };
85 
86 #endif
87 
88 #endif
Definition: EasyScanner.h:16