Granularity in time function
Is there any way to 开发者_高级运维check the granularity of gettimeofday() function provided by POSIX?
Instead of gettimeofday(), consider using clock_gettime() (specifying the CLOCK_REALTIME clock).  This is also POSIX, and supports a clock_getres() function to obtain the resolution.
Call it in a tight loop, note the difference between the current value and the previous one when it changes. Something like the following:
#include <stdio.h>
#include <sys/time.h>
int main()
{
        struct timeval timevals[2];
        int cur = 0;
        while (1) {
                gettimeofday(&timevals[cur], NULL);
                int diff = timevals[cur].tv_usec - timevals[!cur].tv_usec;
                if (diff)
                        printf("%d\n", diff);
                cur = !cur;
        }
}
On my system it seems the granularity is around 2 usec (about 50/50 one or two microseconds, with outliers in the hundreds or thousands that are likely due to task switching).
The current posix way to get the resolution of gettimeofday() is
#include <unistd.h>
long ticks_per_sec = sysconf(_SC_CLK_TCK);
In older posix versions (not sure when the change happened), the value CLOCKS_PER_SEC was #defined.
 加载中,请稍侯......
      
精彩评论