Search code examples
c++linuxtimemeasureelapsedtime

Time measure without using system clock


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?


Solution

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