Вычисление прошедшего времени в программе C в миллисекундах
Я хочу рассчитать время в миллисекундах, взятое при выполнении какой-либо части моей программы. Я смотрю онлайн, но информации по этой теме немного. Кто-нибудь из вас знает, как это сделать?
Ответы
Ответ 1
Лучший способ ответить - это пример:
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/* Return 1 if the difference is negative, otherwise 0. */
int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1)
{
long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec);
result->tv_sec = diff / 1000000;
result->tv_usec = diff % 1000000;
return (diff<0);
}
void timeval_print(struct timeval *tv)
{
char buffer[30];
time_t curtime;
printf("%ld.%06ld", tv->tv_sec, tv->tv_usec);
curtime = tv->tv_sec;
strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime));
printf(" = %s.%06ld\n", buffer, tv->tv_usec);
}
int main()
{
struct timeval tvBegin, tvEnd, tvDiff;
// begin
gettimeofday(&tvBegin, NULL);
timeval_print(&tvBegin);
// lengthy operation
int i,j;
for(i=0;i<999999L;++i) {
j=sqrt(i);
}
//end
gettimeofday(&tvEnd, NULL);
timeval_print(&tvEnd);
// diff
timeval_subtract(&tvDiff, &tvEnd, &tvBegin);
printf("%ld.%06ld\n", tvDiff.tv_sec, tvDiff.tv_usec);
return 0;
}
Ответ 2
Другой вариант (по крайней мере, в некоторых UNIX) - clock_gettime и связанные функции. Они позволяют получить доступ к различным часам реального времени, и вы можете выбрать один из вариантов с более высоким разрешением и выбрасывать требуемое разрешение.
Ответ 3
Функция gettimeofday
возвращает время с точностью до микросекунды (если платформа, конечно, может это поддерживать):
Функция gettimeofday() должна получить текущее время, выраженное как секунд и микросекунд, поскольку Epoch, и сохраните его в timeval структура, на которую указывает tp. разрешение системных часов не определено.
Ответ 4
Библиотеки C имеют функцию, позволяющую вам получить системное время. Вы можете рассчитать прошедшее время после захвата времени начала и остановки.
Функция называется gettimeofday(), и вы можете посмотреть справочную страницу, чтобы узнать, что включать и как ее использовать.
Ответ 5
В Windows вы можете просто сделать это:
DWORD dwTickCount = GetTickCount();
// Perform some things.
printf("Code took: %dms\n", GetTickCount() - dwTickCount);
Не самое общее/элегантное решение, но приятно и быстро, когда вам это нужно.