⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.h

📁 C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ St
💻 H
字号:
//// Timer.h//// $Id: //poco/1.2/Foundation/include/Poco/Timer.h#1 $//// Library: Foundation// Package: Threading// Module:  Timer//// Definition of the Timer and related classes.//// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.// and Contributors.//// Permission is hereby granted, free of charge, to any person or organization// obtaining a copy of the software and accompanying documentation covered by// this license (the "Software") to use, reproduce, display, distribute,// execute, and transmit the Software, and to prepare derivative works of the// Software, and to permit third-parties to whom the Software is furnished to// do so, all subject to the following:// // The copyright notices in the Software and this entire statement, including// the above license grant, this restriction and the following disclaimer,// must be included in all copies of the Software, in whole or in part, and// all derivative works of the Software, unless such copies or derivative// works are solely in the form of machine-executable object code generated by// a source language processor.// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER// DEALINGS IN THE SOFTWARE.//#ifndef Foundation_Timer_INCLUDED#define Foundation_Timer_INCLUDED#include "Poco/Foundation.h"#include "Poco/Runnable.h"#include "Poco/Mutex.h"#include "Poco/Event.h"namespace Poco {class AbstractTimerCallback;class ThreadPool;class Foundation_API Timer: protected Runnable	/// 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 timer thread is taken from a thread pool, so	/// there is a limit to the number of available concurrent timers.{public:	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.	virtual ~Timer();		/// Stops and destroys the timer.	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, ThreadPool& threadPool);		/// Starts the timer.		/// 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.protected:	void run();private:	volatile long _startInterval;	volatile long _periodicInterval;	Event         _wakeUp;	Event         _done;	AbstractTimerCallback* _pCallback;	mutable FastMutex      _mutex;};class Foundation_API AbstractTimerCallback	/// This is the base class for all instantiations of	/// the TimerCallback template.{public:	AbstractTimerCallback();	AbstractTimerCallback(const AbstractTimerCallback& callback);	virtual ~AbstractTimerCallback();		AbstractTimerCallback& operator = (const AbstractTimerCallback& callback);	virtual void invoke(Timer& timer) const = 0;	virtual AbstractTimerCallback* clone() const = 0;};template <class C> class TimerCallback: public AbstractTimerCallback	/// This template class implements an adapter that sits between	/// a Timer and an object's method invoked by the timer.	/// It is quite similar in concept to the RunnableAdapter, but provides 	/// some Timer specific additional methods.	/// See the Timer class for information on how	/// to use this template class.{public:	typedef void (C::*Callback)(Timer&);	TimerCallback(C& object, Callback method): _pObject(&object), _method(method)	{	}	TimerCallback(const TimerCallback& callback): _pObject(callback._pObject), _method(callback._method)	{	}	~TimerCallback()	{	}	TimerCallback& operator = (const TimerCallback& callback)	{		if (&callback != this)		{			_pObject = callback._pObject;			_method  = callback._method;		}		return *this;	}	void invoke(Timer& timer) const	{		(_pObject->*_method)(timer);	}	AbstractTimerCallback* clone() const	{		return new TimerCallback(*this);	}private:	TimerCallback();	C*       _pObject;	Callback _method;};} // namespace Poco#endif // Foundation_Timer_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -