From 99c97f75e2b93ea2cb36f126cd75b298bda5f5a9 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Sun, 14 May 2006 16:47:52 +0000 Subject: Applied a patch by Guillaume that makes the server sleep between ticks instead of polling for the next one. Somebody will need to verify that this works for on Dev-C++ as well. --- src/utils/timer.cpp | 12 ++++++++++++ src/utils/timer.h | 42 +++++++++++++++++++++++------------------- 2 files changed, 35 insertions(+), 19 deletions(-) (limited to 'src/utils') diff --git a/src/utils/timer.cpp b/src/utils/timer.cpp index 97965c75..0e9a6a7e 100644 --- a/src/utils/timer.cpp +++ b/src/utils/timer.cpp @@ -19,6 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include #include "timer.h" namespace tmwserv @@ -33,6 +34,17 @@ Timer::Timer(unsigned int ms, bool createActive) lastpulse = getTimeInMillisec(); }; +void Timer::sleep() +{ + if (!active) return; + uint64_t now = getTimeInMillisec(); + if (now - lastpulse >= interval) return; + struct timespec req; + req.tv_sec = 0; + req.tv_nsec = (interval - (now - lastpulse)) * (1000 * 1000); + nanosleep(&req, 0); +} + int Timer::poll() { int elapsed = 0; diff --git a/src/utils/timer.h b/src/utils/timer.h index a921a828..603d24cd 100644 --- a/src/utils/timer.h +++ b/src/utils/timer.h @@ -43,54 +43,58 @@ namespace utils /** * This class is for timing purpose as a replacement for SDL_TIMER */ - class Timer { public: /** - * Constructor. - */ + * Constructor. + */ Timer(unsigned int ms, bool createActive = true); /** - * returns the number of elapsed tics since last call - */ + * Returns the number of elapsed ticks since last call. + */ int poll(); /** - * activates the timer - */ + * Sleeps till the next tick occurs. + */ + void sleep(); + + /** + * Activates the timer. + */ void start(); /** - * deactivates the timer - */ + * Deactivates the timer. + */ void stop(); /** - * changes the interval between two pulses - */ + * Changes the interval between two pulses. + */ void changeInterval (unsigned int newinterval); private: /** - * calls gettimeofday() and converts it into milliseconds - */ + * Calls gettimeofday() and converts it into milliseconds. + */ uint64_t getTimeInMillisec(); /** - * interval between two pulses - */ + * Interval between two pulses. + */ unsigned int interval; /** - * the time the last pulse occured - */ + * The time the last pulse occured. + */ uint64_t lastpulse; /** - * activity status of the timer - */ + * Activity status of the timer. + */ bool active; }; -- cgit v1.2.3-70-g09d2