Как мне измерить время в C? - PullRequest
39 голосов
/ 24 августа 2010

Я хочу узнать, как долго (приблизительно) выполняется какой-то блок кода.Примерно так:

startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);

Как?

Ответы [ 6 ]

61 голосов
/ 24 августа 2010

Вы можете использовать метод clock в time.h

Пример:

clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
17 голосов
/ 24 августа 2010

Вы можете использовать библиотеку time.h , в частности функции time и difftime :

/* difftime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t start,end;
  double dif;

  time (&start);
  // Do some calculation.
  time (&end);
  dif = difftime (end,start);
  printf ("Your calculations took %.2lf seconds to run.\n", dif );

  return 0;
}

(Пример адаптирован с веб-страницы difftime, указанной выше)

Обратите внимание, что этот метод может дать точность только в секундах - time_t записывает секунды со времени UNIX (1 января 1970 г.).

2 голосов
/ 25 августа 2010

GetTickCount ().

#include <windows.h>
void MeasureIt()
{
    DWORD dwStartTime = GetTickCount();
    DWORD dwElapsed;

    DoSomethingThatYouWantToTime();

    dwElapsed = GetTickCount() - dwStartTime;

    printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000);
}
1 голос
/ 19 марта 2018

Иногда необходимо измерить астрономическое время , а не Процессорное время (особенно это применимо для Linux ):

#include <time.h>

double what_time_is_it()
{
    struct timespec now;
    clock_gettime(CLOCK_REALTIME, &now);
    return now.tv_sec + now.tv_nsec*1e-9;
}

int main() {
    double time = what_time_is_it();
    printf("time taken %.6lf\n", what_time_is_it() - time);
    return 0;
}
1 голос
/ 24 августа 2010

Я бы использовал функции QueryPerformanceCounter и QueryPerformanceFrequency API Windows. Назовите первый до и после блока и вычтите (текущий & минус; старый), чтобы получить количество «тиков» между экземплярами. Разделите это значение, полученное последней функцией, чтобы получить длительность в секундах.

0 голосов
/ 24 августа 2010

Если вам не нужно фантастическое разрешение, вы можете использовать GetTickCount (): http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx (Если это для чего-то другого, чем ваша собственная простая диагностика, то обратите внимание, что это число может быть изменено, так что вынужно справиться с этим с небольшой арифметикой).

QueryPerformanceCounter - еще один разумный вариант.(Это также описано в MSDN)

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