class Poco::Timer
Overview
This class implements a thread-based timer. More…
#include <Timer.h> class Timer: protected Poco::Runnable { public: // construction Timer( long startInterval = 0, long periodicInterval = 0 ); // methods void start(const AbstractTimerCallback& method); void start( const AbstractTimerCallback& method, Thread::Priority priority ); void start( const AbstractTimerCallback& method, ThreadPool& threadPool ); void start( const AbstractTimerCallback& method, Thread::Priority priority, ThreadPool& threadPool ); void stop(); void restart(); void restart(long milliseconds); long getStartInterval() const; void setStartInterval(long milliseconds); long getPeriodicInterval() const; void setPeriodicInterval(long milliseconds); long skipped() const; protected: // methods virtual void run(); };
Inherited Members
public: // methods virtual void run() = 0;
Detailed Documentation
This class implements a thread-based timer.
A timer starts a thread that first waits for a given start interval. Once that interval expires, the timer callback is called repeatedly in the given periodic interval. If the interval is 0, the timer is only called once. The timer callback method can stop the timer by setting the timer’s periodic interval to 0.
The timer callback runs in its own thread, so multithreading issues (proper synchronization) have to be considered when writing the callback method.
The exact interval at which the callback is called depends on many factors like operating system, CPU performance and system load and may differ from the specified interval.
The time needed to execute the timer callback is not included in the interval between invocations. For example, if the interval is 500 milliseconds, and the callback needs 400 milliseconds to execute, the callback function is nevertheless called every 500 milliseconds. If the callback takes longer to execute than the interval, the callback function will not be called until the next proper interval. The number of skipped invocations since the last invocation will be recorded and can be obtained by the callback by calling skipped().
The timer thread is taken from a thread pool, so there is a limit to the number of available concurrent timers.
Construction
Timer( long startInterval = 0, long periodicInterval = 0 )
Creates a new timer object.
StartInterval and periodicInterval are given in milliseconds. If a periodicInterval of zero is specified, the callback will only be called once, after the startInterval expires. To start the timer, call the Start() method.
Methods
void start(const AbstractTimerCallback& method)
Starts the timer.
Create the TimerCallback as follows:
TimerCallback<MyClass> callback(*this, &MyClass::onTimer); timer.start(callback);
The timer thread is taken from the global default thread pool.
void start( const AbstractTimerCallback& method, Thread::Priority priority )
Starts the timer in a thread with the given priority.
Create the TimerCallback as follows:
TimerCallback<MyClass> callback(*this, &MyClass::onTimer); timer.start(callback);
The timer thread is taken from the global default thread pool.
void start( const AbstractTimerCallback& method, ThreadPool& threadPool )
Starts the timer.
Create the TimerCallback as follows:
TimerCallback<MyClass> callback(*this, &MyClass::onTimer); timer.start(callback);
void start( const AbstractTimerCallback& method, Thread::Priority priority, ThreadPool& threadPool )
Starts the timer in a thread with the given priority.
Create the TimerCallback as follows:
TimerCallback<MyClass> callback(*this, &MyClass::onTimer); timer.start(callback);
void stop()
Stops the timer.
If the callback method is currently running it will be allowed to finish first. WARNING: Never call this method from within the callback method, as a deadlock would result. To stop the timer from within the callback method, call restart(0).
void restart()
Restarts the periodic interval.
If the callback method is already running, nothing will happen.
void restart(long milliseconds)
Sets a new periodic interval and restarts the timer.
An interval of 0 will stop the timer.
long getStartInterval() const
Returns the start interval.
void setStartInterval(long milliseconds)
Sets the start interval.
Will only be effective before start() is called.
long getPeriodicInterval() const
Returns the periodic interval.
void setPeriodicInterval(long milliseconds)
Sets the periodic interval.
If the timer is already running the new interval will be effective when the current interval expires.
long skipped() const
Returns the number of skipped invocations since the last invocation.
Skipped invocations happen if the timer callback function takes longer to execute than the timer interval.
virtual void run()
Do whatever the thread needs to do.
Must be overridden by subclasses.