Time measure without using system clock

565 views Asked by At

Is there any way to measure elapsed time in linux/unix without using system clock? The problem is that system clock changes in some situations and elapsed time measured by time or gettimeofday or anything else like that gives incorrect result.

I'm thinking of creating separate thread which performs loop with sleep(100) inside and counts number of repetitions.

Any better solutions?

4

There are 4 answers

2
Vadim Kalinsky On BEST ANSWER

Use monotonic time, which represents time since some point: http://linux.die.net/man/3/clock_gettime

int64_t get_monotonic_timestamp(void)
{
    struct timespec ts;
    clock_gettime(CLOCK_MONOTONIC, &ts);
    return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
}
2
doron On

Measuring elapsed time with sleep (or variants) is a bad idea. Your thread can wake up at any time after the elapsed sleep time so this is sure to be inaccurate.

0
Some programmer dude On

For a time delay, you can use e.g. select.

2
Sean On

std::chrono::steady_clock can be used to measure time, and takes into account changes to the system clock.