00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef PTLIB_TIMER_H
00035 #define PTLIB_TIMER_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 class PThread;
00042
00043 #include <ptlib/notifier.h>
00044
00058 class PSimpleTimer : public PTimeInterval
00059 {
00060 PCLASSINFO(PSimpleTimer, PTimeInterval);
00061
00062 public:
00068 PSimpleTimer(
00069 long milliseconds = 0,
00070 int seconds = 0,
00071 int minutes = 0,
00072 int hours = 0,
00073 int days = 0
00074 );
00075 PSimpleTimer(
00076 const PTimeInterval & time
00077 );
00078 PSimpleTimer(
00079 const PSimpleTimer & timer
00080 );
00081
00088 PSimpleTimer & operator=(
00089 DWORD milliseconds
00090 );
00091 PSimpleTimer & operator=(
00092 const PTimeInterval & time
00093 );
00094 PSimpleTimer & operator=(
00095 const PSimpleTimer & timer
00096 );
00098
00115 virtual void SetInterval(
00116 PInt64 milliseconds = 0,
00117 long seconds = 0,
00118 long minutes = 0,
00119 long hours = 0,
00120 int days = 0
00121 );
00122
00125 void Stop();
00126
00129 PTimeInterval GetElapsed() const;
00130
00133 PTimeInterval GetRemaining() const;
00134
00137 bool IsRunning() const;
00138
00141 bool HasExpired() const;
00142
00145 operator bool() const;
00147
00148 protected:
00149 PTimeInterval m_startTick;
00150 };
00151
00152
00181 class PTimer : public PTimeInterval
00182 {
00183 PCLASSINFO(PTimer, PTimeInterval);
00184
00185 public:
00186 typedef unsigned IDType;
00187
00195 PTimer(
00196 long milliseconds = 0,
00197 int seconds = 0,
00198 int minutes = 0,
00199 int hours = 0,
00200 int days = 0
00201 );
00202 PTimer(
00203 const PTimeInterval & time
00204 );
00205 PTimer(
00206 const PTimer & timer
00207 );
00208
00215 PTimer & operator=(
00216 DWORD milliseconds
00217 );
00218 PTimer & operator=(
00219 const PTimeInterval & time
00220 );
00221 PTimer & operator=(
00222 const PTimer & timer
00223 );
00224
00228 virtual ~PTimer();
00230
00244 virtual void SetInterval(
00245 PInt64 milliseconds = 0,
00246 long seconds = 0,
00247 long minutes = 0,
00248 long hours = 0,
00249 int days = 0
00250 );
00251
00256 void RunContinuous(
00257 const PTimeInterval & time
00258 );
00259
00272 void Stop(
00273 bool wait = true
00274 );
00275
00282 PBoolean IsRunning() const;
00283
00288 void Pause();
00289
00294 void Resume();
00295
00301 PBoolean IsPaused() const;
00302
00305 void Reset();
00306
00309 const PTimeInterval & GetResetTime() const;
00311
00326 virtual void OnTimeout();
00327
00334 const PNotifier & GetNotifier() const;
00335
00339 void SetNotifier(
00340 const PNotifier & func
00341 );
00343
00358 static PTimeInterval Tick();
00359
00368 static unsigned Resolution();
00370
00375 PInt64 GetMilliSeconds() const;
00376
00379 PInt64 GetAbsoluteTime() const { return m_absoluteTime; }
00381
00382
00383 IDType GetTimerId() const { return m_timerId; }
00384 PAtomicInteger::IntegerType GetNextSerialNumber() { return ++m_serialNumber; }
00385
00386 private:
00387 void Construct();
00388
00389
00390
00391
00392 void StartRunning(
00393 PBoolean once
00394 );
00395
00396
00397
00398
00399
00400 void Process(
00401 PInt64 now
00402 );
00403
00404
00405
00406
00407 PNotifier m_callback;
00408
00409
00410 PTimeInterval m_resetTime;
00411
00412
00413 PBoolean m_oneshot;
00414
00415
00416 enum { Stopped, Running, Paused } m_state;
00417
00418 friend class PTimerList;
00419 class PTimerList * m_timerList;
00420
00421 IDType m_timerId;
00422 PAtomicInteger m_serialNumber;
00423 PInt64 m_absoluteTime;
00424
00425
00426 #ifdef _WIN32
00427 #include "msos/ptlib/timer.h"
00428 #else
00429 #include "unix/ptlib/timer.h"
00430 #endif
00431 };
00432
00433 #endif // PTLIB_TIMER_H
00434
00435
00436