Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4SliceTimer.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id: G4SliceTimer.hh 67970 2013-03-13 10:10:06Z gcosmo $
28 //
29 //
30 // ----------------------------------------------------------------------
31 // Class G4SliceTimer
32 //
33 // Class description:
34 //
35 // Class for timer objects, able to measure elasped user/system process
36 // accumulated time.
37 //
38 // Note: Uses <sys/times.h> & <unistd.h> - POSIX.1 defined
39 // If used, this header must be included in the source (.cc) file
40 // and it must be the first header file to be included!
41 //
42 // Member functions:
43 //
44 // G4SliceTimer()
45 // Construct a timer object
46 // Start()
47 // Start timing
48 // Stop()
49 // Stop timing
50 // Clear()
51 // Clear accumulated times
52 // G4bool IsValid()
53 // Return true if have a valid time (ie start() and stop() called)
54 // G4double GetRealElapsed()
55 // Return the elapsed real time between last calling start() and stop()
56 // G4double GetSystemElapsed()
57 // Return the elapsed system time between last calling start() and stop()
58 // G4double GetUserElapsed()
59 // Return the elapsed user time between last calling start() and stop()
60 //
61 // Operators:
62 //
63 // std::ostream& operator << (std::ostream& os, const G4SliceTimer& t);
64 // Print the elapsed real,system and usertimes on os. Prints **s for times
65 // if !IsValid
66 //
67 // Member data:
68 //
69 // G4bool fValidTimes
70 // True after start and stop have both been called more than once and
71 // an equal number of times
72 // clock_t fStartRealTime,fEndRealTime
73 // Real times (arbitrary time 0)
74 // tms fStartTimes,fEndTimes
75 // Timing structures (see times(2)) for start and end times
76 
77 // History:
78 // 23.10.06 - M.Asai - Derived from G4Timer implementation
79 // ----------------------------------------------------------------------
80 #ifndef G4SLICE_TIMER_HH
81 #define G4SLICE_TIMER_HH
82 
83 #ifndef WIN32
84 # include <unistd.h>
85 # include <sys/times.h>
86 #else
87 # include <time.h>
88 # define _SC_CLK_TCK 1
89 
90  extern "C" {
91  int sysconf(int);
92  };
93 
94  // Structure returned by times()
95 
96  struct tms {
97  clock_t tms_utime; /* user time */
98  clock_t tms_stime; /* system time */
99  clock_t tms_cutime; /* user time, children */
100  clock_t tms_cstime; /* system time, children */
101  };
102 
103  extern "C" {
104  extern clock_t times(struct tms *);
105  };
106 #endif /* WIN32 */
107 
108 #include "G4Types.hh"
109 #include "G4ios.hh"
110 
112 {
113  public:
114 
115  G4SliceTimer();
116 
117  inline void Start();
118  inline void Stop();
119  inline void Clear();
120  inline G4bool IsValid() const;
121  G4double GetRealElapsed() const;
122  G4double GetSystemElapsed() const;
123  G4double GetUserElapsed() const;
124 
125  private:
126 
127  G4bool fValidTimes;
128  clock_t fStartRealTime,fEndRealTime;
129  tms fStartTimes,fEndTimes;
130  G4double fRealElapsed,fSystemElapsed,fUserElapsed;
131 };
132 
133 std::ostream& operator << (std::ostream& os, const G4SliceTimer& t);
134 
135 #include "G4SliceTimer.icc"
136 
137 #define times ostimes
138 
139 #endif
G4double GetUserElapsed() const
Definition: G4SliceTimer.cc:79
G4double GetRealElapsed() const
Definition: G4SliceTimer.cc:69
G4double GetSystemElapsed() const
Definition: G4SliceTimer.cc:74
G4bool IsValid() const
bool G4bool
Definition: G4Types.hh:79
std::ostream & operator<<(std::ostream &, const BasicVector3D< float > &)
#define times
double G4double
Definition: G4Types.hh:76