Question

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?

Was it helpful?

Solution 2

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;
}

OTHER TIPS

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

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.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top