My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
AbsTimer.h
Go to the documentation of this file.
1 #ifndef ABSTIMER_H
2 #define ABSTIMER_H
3 
11 // C++ includes
12 
13 #include <list>
14 #include <algorithm> // Needed for find_if()
15 #include <functional> // Needed for predicates
16 
17 // C includes
18 
19 #include <unistd.h>
20 #include <signal.h>
21 #include <time.h>
22 
23 #include "gcp/util/common/Directives.h"
24 
25 #define DEFAULT_CLOCK CLOCK_REALTIME
26 
27 namespace gcp {
28  namespace util {
29 
30 #if !DIR_HAVE_RT
31 
32  // If we don't have realtime libs, this declaration will prevent
33  // the compiler from complaining about it.
34 
35  #define timer_t unsigned int
36 
37  #define SIGRTMIN 31
38 
39  enum {
40  CLOCK_REALTIME
41  };
42 
43 #endif
44 
54  class AbsTimer {
55 
56  public:
57 
61  class TimerId {
62  public:
63 
67  timer_t* timer_;
68 
72  int sigNo_;
73 
77  TimerId(timer_t* timer, int sigNo) : timer_(timer), sigNo_(sigNo) {}
78  };
79 
84  class TimerId_eq : public std::unary_function<TimerId, bool> {
85  timer_t* timer_;
86  public:
87  explicit TimerId_eq(timer_t* timer) : timer_(timer) {}
88  bool operator() (const TimerId& t) const {return t.timer_ == timer_;}
89  };
90 
95  class TimerSig_eq : public std::unary_function<TimerId, bool> {
96  int sigNo_;
97  public:
98  explicit TimerSig_eq(int sigNo) : sigNo_(sigNo) {}
99  bool operator() (const TimerId& t) const {return t.sigNo_ == sigNo_;}
100  };
101 
106  static std::list<TimerId> timerList_;
107 
113  AbsTimer(int signo, void (*handler)(int));
114 
118  AbsTimer(int signo);
119 
123  ~AbsTimer();
124 
130  unsigned long getResolution();
131 
137  void setInitialDelay(unsigned long sec, unsigned long nsec);
138 
142  void setIntervalDelay(unsigned long sec, unsigned long nsec);
143 
148  void reArm();
149 
155  void start(bool rearm=false);
156 
160  void start(unsigned long sec, unsigned long nsec);
161 
167  void stop();
168 
174  bool isRunning();
175 
180  void setIntegral(bool integral);
181 
185  void checkTimer();
186 
191  void fix(unsigned long inSec, unsigned long inNsec,
192  unsigned long& outSec, unsigned long& outNsec);
193 
194  private:
195 
200  void privateConstructor(int signo, void (*handler)(int));
201 
207  bool reArm_;
208 
212  bool isRunning_;
213 
217  bool integral_;
218 
222  bool periodic_;
223 
227  int sigNo_;
228 
232  timer_t timer_;
233 
238  struct sigevent evp_;
239 
243  unsigned long targetSec_;
244 
248  unsigned long targetNanoSec_;
249 
253  unsigned long initSec_;
254 
258  unsigned long initNanoSec_;
259 
263  unsigned long intervalSec_;
264 
268  unsigned long intervalNanoSec_;
269 
275  void addTimer(timer_t* timer, int signo);
276 
281  void remTimer(timer_t* timer);
282 
286  bool timerAlreadyExists(int sigNo);
287 
288  public:
294  void setFutureTime(unsigned long initSec,
295  unsigned long initNanoSec,
296  unsigned long intervalSec,
297  unsigned long intervalNanoSec);
298 
299  }; // End class AbsTimer
300 
301  } // End namespace util
302 } // End namespace gcp
303 
304 
305 #endif // ABSTIMER_H
void stop()
Definition: AbsTimer.cc:294
unsigned long getResolution()
Definition: AbsTimer.cc:173
~AbsTimer()
Definition: AbsTimer.cc:152
Definition: AbsTimer.h:95
void checkTimer()
Definition: AbsTimer.cc:334
Definition: AbsTimer.h:84
int sigNo_
Definition: AbsTimer.h:72
Definition: AbsTimer.h:61
void fix(unsigned long inSec, unsigned long inNsec, unsigned long &outSec, unsigned long &outNsec)
Definition: AbsTimer.cc:382
void setIntegral(bool integral)
Definition: AbsTimer.cc:346
AbsTimer(int signo, void(*handler)(int))
Definition: AbsTimer.cc:74
void reArm()
Definition: AbsTimer.cc:354
void setIntervalDelay(unsigned long sec, unsigned long nsec)
Definition: AbsTimer.cc:203
void setFutureTime(unsigned long initSec, unsigned long initNanoSec, unsigned long intervalSec, unsigned long intervalNanoSec)
Definition: AbsTimer.cc:303
void start(bool rearm=false)
Definition: AbsTimer.cc:218
timer_t * timer_
Definition: AbsTimer.h:67
static std::list< TimerId > timerList_
Definition: AbsTimer.h:106
TimerId(timer_t *timer, int sigNo)
Definition: AbsTimer.h:77
Definition: AbsTimer.h:54
bool isRunning()
Definition: AbsTimer.cc:326
void setInitialDelay(unsigned long sec, unsigned long nsec)
Definition: AbsTimer.cc:192