Гранулярность во времени

Есть ли способ проверить детализацию функции gettimeofday(), предоставляемой POSIX?

Ответ 1

Назовите его в замкнутом цикле, обратите внимание на разницу между текущим и предыдущим значениями при его изменении. Что-то вроде следующего:

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

В моей системе кажется, что степень детализации составляет около 2 мкс (около 50/50 один или два микросекунды с выбросами в сотнях или тысячах, что, вероятно, связано с переключением задач).

Ответ 2

Вместо gettimeofday() рассмотрите возможность использования clock_gettime() (с указанием часов CLOCK_REALTIME). Это также POSIX и поддерживает функцию clock_getres() для получения разрешения.

Ответ 3

Текущий способ posix для получения разрешения gettimeofday() -

#include <unistd.h>
long ticks_per_sec = sysconf(_SC_CLK_TCK);

В старых версиях posix (не уверен, когда произошло изменение) значение CLOCKS_PER_SEC было #defined.