initial commit
This commit is contained in:
+169
@@ -0,0 +1,169 @@
|
||||
//
|
||||
// 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
|
||||
Reference in New Issue
Block a user