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 _PTIMER
00035 #define _PTIMER
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 class PThread;
00042
00043 #include <ptlib/notifier.h>
00044
00073 class PTimer : public PTimeInterval
00074 {
00075 PCLASSINFO(PTimer, PTimeInterval);
00076
00077 public:
00078 typedef unsigned IDType;
00079
00087 PTimer(
00088 long milliseconds = 0,
00089 int seconds = 0,
00090 int minutes = 0,
00091 int hours = 0,
00092 int days = 0
00093 );
00094 PTimer(
00095 const PTimeInterval & time
00096 );
00097
00104 PTimer & operator=(
00105 DWORD milliseconds
00106 );
00107 PTimer & operator=(
00108 const PTimeInterval & time
00109 );
00110
00114 virtual ~PTimer();
00116
00130 virtual void SetInterval(
00131 PInt64 milliseconds = 0,
00132 long seconds = 0,
00133 long minutes = 0,
00134 long hours = 0,
00135 int days = 0
00136 );
00137
00142 void RunContinuous(
00143 const PTimeInterval & time
00144 );
00145
00158 void Stop(
00159 bool wait = true
00160 );
00161
00168 PBoolean IsRunning() const;
00169
00174 void Pause();
00175
00180 void Resume();
00181
00187 PBoolean IsPaused() const;
00188
00191 void Reset();
00192
00195 const PTimeInterval & GetResetTime() const;
00197
00212 virtual void OnTimeout();
00213
00220 const PNotifier & GetNotifier() const;
00221
00225 void SetNotifier(
00226 const PNotifier & func
00227 );
00229
00244 static PTimeInterval Tick();
00245
00254 static unsigned Resolution();
00256
00257 IDType GetTimerId() const { return timerId; }
00258
00259 private:
00260 void Construct();
00261
00262
00263
00264
00265 void StartRunning(
00266 PBoolean once
00267 );
00268
00269
00270
00271
00272
00273 void Process(
00274 const PTimeInterval & delta,
00275 PTimeInterval & minTimeLeft
00276 );
00277
00278
00279
00280
00281 PNotifier callback;
00282
00283
00284 PTimeInterval resetTime;
00285
00286
00287 PBoolean oneshot;
00288
00289
00290 enum { Stopped, Starting, Running, Paused } state;
00291
00292 friend class PTimerList;
00293 class PTimerList * timerList;
00294
00295 IDType timerId;
00296
00297
00298 #ifdef _WIN32
00299 #include "msos/ptlib/timer.h"
00300 #else
00301 #include "unix/ptlib/timer.h"
00302 #endif
00303 };
00304
00305 #endif
00306
00307
00308