strange timing results for 'clock_gettime' and 'gettimeofday'
===

I wanted to check the reliability of `clock_gettime`, using the deprecated `gettimeofday` as reference, but am getting strange results sometimes:


    #include <stdio.h>
    #include <sys/time.h>
    #include <iostream>

    void clock_gettime_test()
    {
        struct timespec tp;
        clock_gettime(CLOCK_MONOTONIC_RAW, &tp);
        long a = tp.tv_nsec;
        usleep(250000);
        clock_gettime(CLOCK_MONOTONIC_RAW, &tp);
        long b = tp.tv_nsec;
        printf("clock_gettime (%ld - %ld): %lf msec\n", b, a, (b - a)/1000000.0);
    }

    void gettimeofday_test()
    {
        struct timeval tv;
        gettimeofday(&tv, NULL);
        long a = tv.tv_usec;
        usleep(250000);
        gettimeofday(&tv, NULL);
        long b = tv.tv_usec;
        printf("gettimeofday (%ld - %ld): %lf msec\n", b, a, (b - a)/1000.0);
    }

    int main()
    {
        clock_gettime_test();
        gettimeofday_test();
        return 0;
    }

Building and running, I sometimes get the right results:

    $ g++ -Wall play.cpp -lrt && ./a.out
    clock_gettime (392441961 - 142299879): 250.142082 msec
    gettimeofday (592906 - 342644): 250.262000 msec

But sometimes, me not so lucky:

    $ g++ -Wall play.cpp -lrt && ./a.out
    clock_gettime (155321165 - 905000848): -749.679683 msec
    gettimeofday (352232 - 101938): 250.294000 msec

I have tried this both on an i686 and an amd64, and get similar results. I also tried `nanosleep`, with the same sad results.