Подтвердить что ты не робот

C - gettimeofday для вычисления времени?

Вы знаете, как использовать gettimeofday для измерения времени вычислений? Я могу измерить один раз этим кодом:

  char buffer[30];
  struct timeval tv;

  time_t curtime;



 gettimeofday(&tv, NULL); 
 curtime=tv.tv_sec;

 strftime(buffer,30,"%m-%d-%Y  %T.",localtime(&curtime));
 printf("%s%ld\n",buffer,tv.tv_usec);

Этот сделан до вычислений, второй после. Но знаете ли вы, как вычитать это?

Мне нужен результат в миллисекундах

4b9b3361

Ответ 1

В переменной curtime указано количество секунд с момента. Если вы получаете один до и один за другим, более поздний минус более раннее, это истекшее время в секундах. Вы можете просто вычесть значения time_t.

Ответ 2

Для вычитания временных интервалов:

gettimeofday(&t0, 0);
/* ... */
gettimeofday(&t1, 0);
long elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec;

Предполагается, что вы будете работать с интервалами менее ~ 2000 секунд, после чего арифметика может переполняться в зависимости от используемых типов. Если вам нужно работать с более длинными интервалами, просто измените последнюю строку на:

long long elapsed = (t1.tv_sec-t0.tv_sec)*1000000LL + t1.tv_usec-t0.tv_usec;

Ответ 3

Если вы хотите измерить эффективность кода или любым другим способом измерить временные интервалы, следующее будет проще:

#include <time.h>

int main()
{
   clock_t start = clock();
   //... do work here
   clock_t end = clock();
   double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;
   return 0;
}

HTH

Ответ 4

Ответ, предложенный @Даниэлем Камилом Козаром, является правильным ответом - на самом деле не следует использовать gettimeofday для измерения прошедшего времени. Вместо этого используйте clock_gettime (CLOCK_MONOTONIC).


Man Pages say - Время, возвращаемое gettimeofday(), зависит от прерывистых переходов в системном времени (например, если системный администратор вручную изменяет системное время). Если вам нужны монотонно увеличивающиеся часы, см. Clock_gettime (2).

Opengroup говорит: приложения должны использовать функцию clock_gettime() вместо устаревающей функции gettimeofday().

Кажется, что все любят gettimeofday, пока не наткнутся на случай, когда он не работает или его нет (VxWorks)... clock_gettime является фантастически удивительным и портативным.

< <