diff options
author | Mathias Gumz <akira at fluxbox dot org> | 2014-05-12 08:22:49 (GMT) |
---|---|---|
committer | Mathias Gumz <akira at fluxbox dot org> | 2014-05-12 08:22:49 (GMT) |
commit | 913244789fac779d8c4ce719d3e9534312feacc2 (patch) | |
tree | bcd0065e3c3b7bb977a6b594acfb0295c2dd86b7 | |
parent | 9b40943deaac2c72d3cc1c6ec4645a32562ab810 (diff) | |
download | fluxbox-913244789fac779d8c4ce719d3e9534312feacc2.zip fluxbox-913244789fac779d8c4ce719d3e9534312feacc2.tar.bz2 |
fix clocktool lagging behind and skipping seconds
from time to time (...) time() might be off to gettimeofday() by a
second. the reason for this is that time() is usually implemented
by just returning the field 'second' of the struct that represents
the clock inside the kernel. gettimeofday() on the other hand also
takes the 'fraction' field (mostly 'nanoseconds') into account and
thus is closer to the current time than time().
the result of using time() was a perceived 'lag', sometimes the
clocktool even skipped a second. by using FbTk::FbTime()::system()
instead fixes the issue.
-rw-r--r-- | src/ClockTool.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/ClockTool.cc b/src/ClockTool.cc index 0812092..514d45d 100644 --- a/src/ClockTool.cc +++ b/src/ClockTool.cc | |||
@@ -247,9 +247,20 @@ unsigned int ClockTool::height() const { | |||
247 | 247 | ||
248 | void ClockTool::updateTime() { | 248 | void ClockTool::updateTime() { |
249 | 249 | ||
250 | time_t t = time(NULL); | 250 | // time() might result in a different seconds-since-epoch than |
251 | // gettimeofday() due to the fact that time() might be implemented by just | ||
252 | // returning the amount of elapsed full seconds without taking into | ||
253 | // account the sum of accumulated sub-seconds might be bigger than a | ||
254 | // second. in this situation time() is 1s behind gettimeofday() which would | ||
255 | // result in having the same 'text' and thus fluxbox would skip this | ||
256 | // round. reference: | ||
257 | // | ||
258 | // http://stackoverflow.com/questions/22917318/time-and-gettimeofday-return-different-seconds/23597725#23597725 | ||
251 | 259 | ||
252 | if (t != -1) { | 260 | uint64_t now = FbTk::FbTime::system(); |
261 | time_t t = static_cast<time_t>(now / 1000000L); | ||
262 | |||
263 | if (t != static_cast<time_t>(-1)) { | ||
253 | 264 | ||
254 | char buf[255]; | 265 | char buf[255]; |
255 | int len; | 266 | int len; |