我想计算执行程序某些部分所花费的时间(以毫秒为单位)。我一直在网上看,但关于这个主题的信息不多。你们中的任何人都知道如何做到这一点吗?
答案 0 :(得分:33)
回答的最佳方式是举例:
#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;
}
答案 1 :(得分:4)
另一个选项(至少在某些UNIX上)是clock_gettime和相关函数。这些允许访问各种实时时钟,您可以选择一个较高分辨率的时钟,并丢弃您不需要的分辨率。
答案 2 :(得分:3)
gettimeofday
函数以微秒精度返回时间(当然,如果平台可以支持该时间):
gettimeofday()函数应该 获取当前时间,表示为 从那以后的秒和微秒 Epoch,并将其存储在timeval中 tp指向的结构。该 系统时钟的分辨率是 未指定的。
答案 3 :(得分:2)
C库具有让您获得系统时间的功能。您可以计算捕获开始和停止时间后的经过时间。
该函数名为gettimeofday(),您可以查看手册页以了解要包含的内容以及如何使用它。
答案 4 :(得分:0)
在Windows上,您可以这样做:
DWORD dwTickCount = GetTickCount();
// Perform some things.
printf("Code took: %dms\n", GetTickCount() - dwTickCount);
不是最通用/最优雅的解决方案,但在您需要时又好又快。