summaryrefslogtreecommitdiff
path: root/src/utils/timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/timer.cpp')
-rw-r--r--src/utils/timer.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/utils/timer.cpp b/src/utils/timer.cpp
index eecbb7f1..25d96cbc 100644
--- a/src/utils/timer.cpp
+++ b/src/utils/timer.cpp
@@ -29,29 +29,25 @@ namespace utils
Timer::Timer(signed int ms, bool createActive)
{
active = createActive;
- interval = (ms * CLOCKS_PER_SEC) / 1000;
- nextpulse = clock() + interval;
+ interval = ms;
+ lastpulse = getTimeInMillisec();
};
-bool Timer::poll()
+int Timer::poll()
{
- if (!active) return false;
-
- if (nextpulse < clock())
+ int elapsed = 0;
+ if (active)
{
- nextpulse += interval;
- return true;
- }
- else {
- return false;
+ elapsed = (getTimeInMillisec() - lastpulse) / interval;
+ lastpulse += interval * elapsed;
};
-
+ return elapsed;
};
void Timer::start()
{
active = true;
- nextpulse = clock() + interval;
+ lastpulse = getTimeInMillisec();
};
void Timer::stop()
@@ -59,13 +55,20 @@ void Timer::stop()
active = false;
};
-void Timer::changeInterval(signed int ms)
+void Timer::changeInterval(signed int newinterval)
{
- signed int newinterval = ms * CLOCKS_PER_SEC / 1000;
- nextpulse = nextpulse - interval + newinterval;
interval = newinterval;
};
+signed long long int Timer::getTimeInMillisec()
+{
+ signed long long int timeInMillisec;
+ timeval time;
+
+ gettimeofday(&time, 0);
+ timeInMillisec = (signed long long int)time.tv_sec * 1000 + time.tv_usec / 1000;
+ return timeInMillisec;
+};
} // ::utils
} // ::tmwserv