aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathias Gumz <akira at fluxbox dot org>2014-05-12 08:22:49 (GMT)
committerMathias Gumz <akira at fluxbox dot org>2014-05-12 08:22:49 (GMT)
commit913244789fac779d8c4ce719d3e9534312feacc2 (patch)
treebcd0065e3c3b7bb977a6b594acfb0295c2dd86b7 /src
parent9b40943deaac2c72d3cc1c6ec4645a32562ab810 (diff)
downloadfluxbox-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.
Diffstat (limited to 'src')
-rw-r--r--src/ClockTool.cc15
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
248void ClockTool::updateTime() { 248void 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;