Зернистость в функции времени - PullRequest
1 голос
/ 23 января 2011

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

Ответы [ 3 ]

3 голосов
/ 24 января 2011

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

1 голос
/ 23 января 2011

Назовите это в узком цикле, отметьте разницу между текущим значением и предыдущим, когда оно изменяется. Примерно так:

#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 одна или две микросекунды с выбросами в сотни или тысячи, которые, вероятно, связаны с переключением задач).

0 голосов
/ 24 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...