估计时间的建议方法是使用clock() 函数,然后将cpu 周期数除以周期/秒。
我的问题是我尝试运行的程序需要很多时间(以小时为单位)。这意味着 clock() 函数(返回一个 long int)返回一个垃圾值(因为 max long int 不够大)
有什么建议(除了估计内部循环的时间并将它们加起来什么的)?
long t1 = clock();
function();
long t2=clock();
time = ((double)t2 - t1) / CLOCKS_PER_SEC
估计时间的建议方法是使用clock() 函数,然后将cpu 周期数除以周期/秒。
我的问题是我尝试运行的程序需要很多时间(以小时为单位)。这意味着 clock() 函数(返回一个 long int)返回一个垃圾值(因为 max long int 不够大)
有什么建议(除了估计内部循环的时间并将它们加起来什么的)?
long t1 = clock();
function();
long t2=clock();
time = ((double)t2 - t1) / CLOCKS_PER_SEC
如果你在 Linux / Unix 下运行它,你可以说:
time my_process
用百分比误差来考虑问题。
如果您的程序需要几个小时才能运行(假设 4 小时……或 14,400 秒),那么 1/2% 的错误是 72 秒,或略多于一分钟。
换句话说,要得到百分之一的 1/2 以内的准确答案,您只需要计时到最近的一分钟。假设手持秒表的计时可以在一秒甚至 1/10 秒之内,那么您的错误将微不足道。
我的观点是,您只需使用秒计时器或手持秒表即可准确测量您的程序。
如果程序长时间运行,那么亚秒级精度可能不是特别重要。在那种情况下,为什么不打电话time()呢?
增压计时器工作良好。
计时器库提供了一个用于测量经过时间的计时器类、一个用于报告经过时间的progress_timer 类和一个用于显示目标进度指示的progress_display 类。
gettimeofday()
#include <sys/time.h>
int gettimeofday(struct timeval *tv, NULL);
gettimeofday() 和 settimeofday() 函数可以获取时间。tv 参数是一个 struct timeval(在 中指定):
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
time_t 至少为 32 位,因此它可以存储小时数。
如果精度(由诸如 queryPerformanceTimer 之类的赢调用给出)不重要,我会采用 getTimeofTheDay 类型的方法(由@osgx 建议)。
#include <time.h>
int main()
{
clock_t t1,t2;
t1=clock();
//write your code here
t2=clock();
float runningTime ((float)t2-(float)t1);
//runningTime contains the time
return 0;
}