RtTimer.h

00001 /**********************************************************************/
00032 /**********************************************************************/
00033 
00034 #ifndef RTTIMER_H
00035 #define RTTIMER_H
00036 
00037 #include "RtError.h"
00038 #include <string>
00039 
00040 class RtTimer
00041 {
00042 public:
00043 
00045     static const int MIN_PERIOD = 1;
00047     static const int MAX_PERIOD = 5000;
00048 
00049     RtTimer();
00050         virtual ~RtTimer();
00051 
00053 
00060     typedef void (*RtTimerCallback)( double delta,
00061                                      double timeStamp,
00062                                      void *userData );
00063 
00065 
00071         void setCallback( RtTimerCallback callback, void *userData = 0 );
00072 
00074 
00077         void cancelCallback();
00078 
00080 
00083         void start(unsigned int period);
00084 
00086 
00089         void stop(void);
00090 
00092 
00098         double getTimestamp();
00099 
00100     // The RtTimerData structure is used to pass private class data to
00101     // the timer handling function or thread.
00102     struct RtTimerData {
00103         void *apiData;
00104         void *userCallback;
00105         void *userData;
00106         bool doInput;
00107         bool firstMessage;
00108         // Default constructor.
00109         RtTimerData() : apiData(0),
00110                         userCallback(0),
00111                         userData(0),
00112                         doInput(false),
00113                         firstMessage(true) {}
00114      };
00115 
00116     void *apiData_;
00117     std::string errorString_;
00118 
00119 private:
00120     // A basic error reporting function for internal use.
00121     void error( RtError::Type type );
00122 
00123     RtTimerData inputData_;
00124 };
00125 
00126 #endif /* RTTIMER_H */