123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- //
- // Timer.h
- //
- // Library: Util
- // Package: Timer
- // Module: Timer
- //
- // Definition of the Timer class.
- //
- // Copyright (c) 2009, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef Util_Timer_INCLUDED
- #define Util_Timer_INCLUDED
- #include "Poco/Util/Util.h"
- #include "Poco/Util/TimerTask.h"
- #include "Poco/TimedNotificationQueue.h"
- #include "Poco/Thread.h"
- #include "Poco/Runnable.h"
- namespace Poco {
- namespace Util {
- class Util_API Timer: protected Poco::Runnable
- /// A Timer allows to schedule tasks (TimerTask objects) for future execution
- /// in a background thread. Tasks may be scheduled for one-time execution,
- /// or for repeated execution at regular intervals.
- ///
- /// The Timer object creates a thread that executes all scheduled tasks
- /// sequentially. Therefore, tasks should complete their work as quickly
- /// as possible, otherwise subsequent tasks may be delayed.
- ///
- /// Timer is safe for multithreaded use - multiple threads can schedule
- /// new tasks simultaneously.
- ///
- /// Acknowledgement: The interface of this class has been inspired by
- /// the java.util.Timer class from Java 1.3.
- {
- public:
- Timer();
- /// Creates the Timer.
-
- explicit Timer(Poco::Thread::Priority priority);
- /// Creates the Timer, using a timer thread with
- /// the given priority.
-
- ~Timer();
- /// Destroys the Timer, cancelling all pending tasks.
-
- void cancel(bool wait = false);
- /// Cancels all pending tasks.
- ///
- /// If a task is currently running, it is allowed to finish.
- ///
- /// Task cancellation is done asynchronously. If wait
- /// is false, cancel() returns immediately and the
- /// task queue will be purged as soon as the currently
- /// running task finishes. If wait is true, waits
- /// until the queue has been purged.
-
- void schedule(TimerTask::Ptr pTask, Poco::Timestamp time);
- /// Schedules a task for execution at the specified time.
- ///
- /// If the time lies in the past, the task is executed
- /// immediately.
- ///
- /// Note: the relative time the task will be executed
- /// won't change if the system's time changes. If the
- /// given time is 10 seconds in the future at the point
- /// schedule() is called, the task will be executed 10
- /// seconds later, even if the system time changes in
- /// between.
- void schedule(TimerTask::Ptr pTask, Poco::Clock clock);
- /// Schedules a task for execution at the specified time.
- ///
- /// If the time lies in the past, the task is executed
- /// immediately.
-
- void schedule(TimerTask::Ptr pTask, long delay, long interval);
- /// Schedules a task for periodic execution.
- ///
- /// The task is first executed after the given delay.
- /// Subsequently, the task is executed periodically with
- /// the given interval in milliseconds between invocations.
- void schedule(TimerTask::Ptr pTask, Poco::Timestamp time, long interval);
- /// Schedules a task for periodic execution.
- ///
- /// The task is first executed at the given time.
- /// Subsequently, the task is executed periodically with
- /// the given interval in milliseconds between invocations.
- ///
- /// Note: the relative time the task will be executed
- /// won't change if the system's time changes. If the
- /// given time is 10 seconds in the future at the point
- /// schedule() is called, the task will be executed 10
- /// seconds later, even if the system time changes in
- /// between.
- void schedule(TimerTask::Ptr pTask, Poco::Clock clock, long interval);
- /// Schedules a task for periodic execution.
- ///
- /// The task is first executed at the given time.
- /// Subsequently, the task is executed periodically with
- /// the given interval in milliseconds between invocations.
-
- void scheduleAtFixedRate(TimerTask::Ptr pTask, long delay, long interval);
- /// Schedules a task for periodic execution at a fixed rate.
- ///
- /// The task is first executed after the given delay.
- /// Subsequently, the task is executed periodically
- /// every number of milliseconds specified by interval.
- ///
- /// If task execution takes longer than the given interval,
- /// further executions are delayed.
- void scheduleAtFixedRate(TimerTask::Ptr pTask, Poco::Timestamp time, long interval);
- /// Schedules a task for periodic execution at a fixed rate.
- ///
- /// The task is first executed at the given time.
- /// Subsequently, the task is executed periodically
- /// every number of milliseconds specified by interval.
- ///
- /// If task execution takes longer than the given interval,
- /// further executions are delayed.
- ///
- /// Note: the relative time the task will be executed
- /// won't change if the system's time changes. If the
- /// given time is 10 seconds in the future at the point
- /// scheduleAtFixedRate() is called, the task will be executed 10
- /// seconds later, even if the system time changes in
- /// between.
- void scheduleAtFixedRate(TimerTask::Ptr pTask, Poco::Clock clock, long interval);
- /// Schedules a task for periodic execution at a fixed rate.
- ///
- /// The task is first executed at the given time.
- /// Subsequently, the task is executed periodically
- /// every number of milliseconds specified by interval.
- ///
- /// If task execution takes longer than the given interval,
- /// further executions are delayed.
- protected:
- void run();
- static void validateTask(const TimerTask::Ptr& pTask);
-
- private:
- Timer(const Timer&);
- Timer& operator = (const Timer&);
-
- Poco::TimedNotificationQueue _queue;
- Poco::Thread _thread;
- };
- } } // namespace Poco::Util
- #endif // Util_Timer_INCLUDED
|