我想要计算我的程序的某些部分的执行采取毫秒的时间。 我一直在寻找线上,但有没有关于这个话题很多信息。 任何人都知道如何做到这一点?
Answer 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;
}
Answer 2:
另一种选择(至少在某些UNIX)是clock_gettime和相关的功能。 这允许访问各种实时时钟,你可以选择更高的分辨率者之一,扔掉你不需要的分辨率。
Answer 3:
该gettimeofday
函数返回微秒精度的时间(如果该平台可以支持,当然):
的函数gettimeofday()函数将获取当前时间,表示为从epoch秒和微秒,并将其存储在所述的timeval结构通过TP指向。 系统时钟的决议是不确定的。
Answer 4:
C库有一个功能,让你的系统时间。 您捕获开始和结束时间后,可以计算经过的时间。
该函数被调用函数gettimeofday(),你可以看看手册页找出包括和如何使用它。
Answer 5:
在Windows中,你可以这样做:
DWORD dwTickCount = GetTickCount();
// Perform some things.
printf("Code took: %dms\n", GetTickCount() - dwTickCount);
没有最普通/优雅的解决方案,但好,见效快,当你需要它。
文章来源: Calculating elapsed time in a C program in milliseconds