|  | #if !defined(_concurrency_TimerManager_h_) | 
|  | #define _concurrency_TimerManager_h_ 1 | 
|  |  | 
|  | #include "Exception.h" | 
|  | #include "Monitor.h" | 
|  | #include "Thread.h" | 
|  |  | 
|  | #include <map> | 
|  |  | 
|  | #include <time.h> | 
|  |  | 
|  | namespace facebook { namespace thrift { namespace concurrency { | 
|  |  | 
|  | /** Timer Manager | 
|  |  | 
|  | This class dispatches timer tasks when they fall due. | 
|  |  | 
|  | @author marc | 
|  | @version $Id:$ */ | 
|  |  | 
|  | class TimerManager { | 
|  |  | 
|  | public: | 
|  |  | 
|  | TimerManager(); | 
|  |  | 
|  | virtual ~TimerManager(); | 
|  |  | 
|  | virtual const ThreadFactory* threadFactory() const; | 
|  |  | 
|  | virtual void threadFactory(const ThreadFactory* value); | 
|  |  | 
|  | /** Starts the timer manager service | 
|  |  | 
|  | @throws IllegalArgumentException Missing thread factory attribute */ | 
|  |  | 
|  | virtual void start(); | 
|  |  | 
|  | /** Stops the timer manager service */ | 
|  |  | 
|  | virtual void stop(); | 
|  |  | 
|  | virtual size_t taskCount() const ; | 
|  |  | 
|  | /** Adds a task to be executed at some time in the future by a worker thread. | 
|  |  | 
|  | @param task The task to execute | 
|  | @param timeout Time in milliseconds to delay before executing task */ | 
|  |  | 
|  | virtual void add(Runnable* task, long long timeout); | 
|  |  | 
|  | /** Adds a task to be executed at some time in the future by a worker thread. | 
|  |  | 
|  | @param task The task to execute | 
|  | @param timeout Absolute time in the future to execute task. */ | 
|  |  | 
|  | virtual void add(Runnable* task, const struct timespec& timeout); | 
|  |  | 
|  | /** Removes a pending task | 
|  |  | 
|  | @throws NoSuchTaskException Specified task doesn't exist.  It was either processed already or this call was made for a task that | 
|  | was never added to this timer | 
|  |  | 
|  | @throws UncancellableTaskException Specified task is already being executed or has completed execution. */ | 
|  |  | 
|  | virtual void remove(Runnable* task); | 
|  |  | 
|  | enum STATE { | 
|  | UNINITIALIZED = 1000, | 
|  | STARTING = 1001, | 
|  | STARTED = 1002, | 
|  | STOPPING = 1003, | 
|  | STOPPED = 1004 | 
|  | }; | 
|  |  | 
|  | virtual const STATE state() const; | 
|  |  | 
|  | private: | 
|  |  | 
|  | const ThreadFactory* _threadFactory; | 
|  |  | 
|  | class Task; | 
|  |  | 
|  | friend class Task; | 
|  |  | 
|  | std::multimap<long long, Task*> _taskMap; | 
|  |  | 
|  | size_t _taskCount; | 
|  |  | 
|  | Monitor _monitor; | 
|  |  | 
|  | STATE _state; | 
|  |  | 
|  | class Dispatcher; | 
|  |  | 
|  | friend class Dispatcher; | 
|  |  | 
|  | Dispatcher* _dispatcher; | 
|  |  | 
|  | Thread* _dispatcherThread; | 
|  |  | 
|  | }; | 
|  |  | 
|  | }}} // facebook::thrift::concurrency | 
|  |  | 
|  | #endif // !defined(_concurrency_TimerManager_h_) |