Как измерить время в C?

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

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

Как?

41
задан Hamid Pourjam 2 August 2016 в 11:57
поделиться

5 ответов

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

Пример:

clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
64
ответ дан 27 November 2019 в 00:29
поделиться

Вы можете использовать библиотеку 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 г.).

18
ответ дан 27 November 2019 в 00:29
поделиться

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

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

0
ответ дан 27 November 2019 в 00:29
поделиться

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

1
ответ дан 27 November 2019 в 00:29
поделиться

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);
}
2
ответ дан 27 November 2019 в 00:29
поделиться
Другие вопросы по тегам:

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