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.
This commit is contained in:
parent
9b40943dea
commit
913244789f
1 changed files with 13 additions and 2 deletions
|
@ -247,9 +247,20 @@ unsigned int ClockTool::height() const {
|
|||
|
||||
void ClockTool::updateTime() {
|
||||
|
||||
time_t t = time(NULL);
|
||||
// time() might result in a different seconds-since-epoch than
|
||||
// gettimeofday() due to the fact that time() might be implemented by just
|
||||
// returning the amount of elapsed full seconds without taking into
|
||||
// account the sum of accumulated sub-seconds might be bigger than a
|
||||
// second. in this situation time() is 1s behind gettimeofday() which would
|
||||
// result in having the same 'text' and thus fluxbox would skip this
|
||||
// round. reference:
|
||||
//
|
||||
// http://stackoverflow.com/questions/22917318/time-and-gettimeofday-return-different-seconds/23597725#23597725
|
||||
|
||||
if (t != -1) {
|
||||
uint64_t now = FbTk::FbTime::system();
|
||||
time_t t = static_cast<time_t>(now / 1000000L);
|
||||
|
||||
if (t != static_cast<time_t>(-1)) {
|
||||
|
||||
char buf[255];
|
||||
int len;
|
||||
|
|
Loading…
Reference in a new issue