Как измерить время в миллисекундах с помощью ANSI C?

Когда мы должны делать rm -rf *?

Основное использование

Когда что-то происходит неожиданно. Это включает в себя:

  • «У меня установлена ​​библиотека FOO , но CMake не может ее найти»,
  • «Я изменил файл BAR , но CMake не перестраивает свои зависимости »,
  • и т. д.

Другие использования

Технически, удаление каталога сборки обычно помогает в очистке кэша CMake. (Таким образом, тот же эффект может быть достигнут командой rm CMakeCache.txt). Это в основном необходимо для повторного поиска таких вещей, как библиотеки или файлы заголовков. Примеры:

  • «Я изменил настройки среды, поэтому CMake нужно найти другую библиотеку »
  • «Я изменил переменные CMake до find_package, поэтому CMake необходимо найти другую библиотеку "
118
задан zengr 4 May 2012 в 21:56
поделиться

4 ответа

Нет никакой функции ANSI C, которая обеспечивает лучше, чем 1 разрешение второго раза, но функция POSIX gettimeofday обеспечивает разрешение микросекунды. Функция тактового генератора только измеряет количество времени, что процесс потратил выполнение и не точен во многих системах.

можно использовать эту функцию как это:

struct timeval tval_before, tval_after, tval_result;

gettimeofday(&tval_before, NULL);

// Some code you want to time, for example:
sleep(1);

gettimeofday(&tval_after, NULL);

timersub(&tval_after, &tval_before, &tval_result);

printf("Time elapsed: %ld.%06ld\n", (long int)tval_result.tv_sec, (long int)tval_result.tv_usec);

Это возвращается Time elapsed: 1.000870 на моей машине.

88
ответ дан s1m0n 24 November 2019 в 01:59
поделиться
#include <time.h>
clock_t uptime = clock() / (CLOCKS_PER_SEC / 1000);
45
ответ дан Judge Maygarden 24 November 2019 в 01:59
поделиться

Я всегда использую clock_gettime () функция, возвращая время из часов CLOCK_MONOTONIC. Возвращенное время является количеством времени, в секундах и наносекундах, начиная с некоторой неуказанной точки в прошлом, таких как системный запуск эпохи.

#include <stdio.h>
#include <stdint.h>
#include <time.h>

int64_t timespecDiff(struct timespec *timeA_p, struct timespec *timeB_p)
{
  return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -
           ((timeB_p->tv_sec * 1000000000) + timeB_p->tv_nsec);
}

int main(int argc, char **argv)
{
  struct timespec start, end;
  clock_gettime(CLOCK_MONOTONIC, &start);

  // Some code I am interested in measuring 

  clock_gettime(CLOCK_MONOTONIC, &end);

  uint64_t timeElapsed = timespecDiff(&end, &start);
}
26
ответ дан 24 November 2019 в 01:59
поделиться

Лучшая точность, которую можно возможно получить, с помощью x86-единственной "rdtsc" инструкции, которая может обеспечить, разрешение уровня тактовых сигналов (ne должен, конечно, принять во внимание, что стоимость rdtsc называет себя, который может быть измерен легко на запуске приложения).

основная выгода здесь измеряет количество часов в секунду, которые не должны быть слишком твердыми.

4
ответ дан Dark Shikari 24 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: