TimeMeter A portable class for time measuring¶
File TimeMeter.hh
1/*--------------------------------------------------------------------------*\
2 | |
3 | Copyright (C) 2010 |
4 | |
5 | , __ , __ |
6 | /|/ \ /|/ \ |
7 | | __/ _ ,_ | __/ _ ,_ |
8 | | \|/ / | | | | \|/ / | | | |
9 | |(__/|__/ |_/ \_/|/|(__/|__/ |_/ \_/|/ |
10 | /| /| |
11 | \| \| |
12 | |
13 | Enrico Bertolazzi |
14 | Dipartimento di Ingegneria Meccanica e Strutturale |
15 | Universita` degli Studi di Trento |
16 | Via Mesiano 77, I-38050 Trento, Italy |
17 | email: enrico.bertolazzi@unitn.it |
18 | |
19 | version: 0.1 04-01-2010 |
20 | |
21 \*--------------------------------------------------------------------------*/
22
23#ifndef TIME_METER_HH
24#define TIME_METER_HH
25
26bool getTime( long & sec, long & usec ) ;
27
28class TimeMeter {
29
30 long sec, usec ;
31
32 TimeMeter( TimeMeter const & ) ;
33 TimeMeter const & operator = ( TimeMeter const & ) const ;
34
35public:
36
37 TimeMeter() { start() ; }
38 ~TimeMeter() {} ;
39
40 void start() ;
41 double seconds() ;
42 double milliseconds() ;
43
44} ;
45
46#endif
File TimeMeter.cc
1/*--------------------------------------------------------------------------*\
2 | |
3 | Copyright (C) 2010 |
4 | |
5 | , __ , __ |
6 | /|/ \ /|/ \ |
7 | | __/ _ ,_ | __/ _ ,_ |
8 | | \|/ / | | | | \|/ / | | | |
9 | |(__/|__/ |_/ \_/|/|(__/|__/ |_/ \_/|/ |
10 | /| /| |
11 | \| \| |
12 | |
13 | Enrico Bertolazzi |
14 | Dipartimento di Ingegneria Meccanica e Strutturale |
15 | Universita` degli Studi di Trento |
16 | Via Mesiano 77, I-38050 Trento, Italy |
17 | email: enrico.bertolazzi@unitn.it |
18 | |
19 | version: 0.1 04-01-2010 |
20 | |
21 \*--------------------------------------------------------------------------*/
22
23#include "TimeMeter.hh"
24
25using namespace std ;
26
27/*
28// _ _____ _
29// __ _ ___| ||_ _(_)_ __ ___ ___
30// / _` |/ _ \ __|| | | | '_ ` _ \ / _ \
31// | (_| | __/ |_ | | | | | | | | | __/
32// \__, |\___|\__||_| |_|_| |_| |_|\___|
33// |___/
34*/
35
36#ifdef WIN32
37 #ifndef WIN32_LEAN_AND_MEAN
38 #define WIN32_LEAN_AND_MEAN
39 #endif
40 #include <windows.h>
41 bool
42 getTime( long & sec, long & usec ) {
43 FILETIME ft ;
44 GetSystemTimeAsFileTime( &ft ) ;
45
46 // FILETIME To UNIX Time
47 unsigned __int64 u_sec = ft . dwHighDateTime ;
48 u_sec <<= 32 ;
49 u_sec |= ft . dwLowDateTime ;
50 u_sec -= 116444736000000000ULL ;
51 u_sec /= 10ULL ;
52
53 sec = long( u_sec / 1000000L ) ;
54 usec = long( u_sec % 1000000L ) ;
55 return true ;
56 }
57#else
58 #include <sys/time.h>
59 bool
60 getTime( long & sec, long & usec ) {
61 struct timeval now ;
62 bool ok = gettimeofday(&now, NULL) == 0 ;
63 if ( ok ) {
64 sec = now . tv_sec;
65 usec = now . tv_usec;
66 } else {
67 sec = usec = 0 ;
68 }
69 return ok ;
70 }
71#endif
72
73void
74TimeMeter::start() {
75 getTime( sec, usec ) ;
76}
77
78double
79TimeMeter::seconds() {
80 long new_sec, new_usec ;
81 getTime( new_sec, new_usec ) ;
82 return (new_sec-sec)+(new_usec-usec)*1E-6 ;
83}
84
85double
86TimeMeter::milliseconds() {
87 long new_sec, new_usec ;
88 getTime( new_sec, new_usec ) ;
89 return (new_sec-sec)*1E3+(new_usec-usec)*1E-3 ;
90}
91
92// EOF TimeMeter.cc