2

估计时间的建议方法是使用clock() 函数,然后将cpu 周期数除以周期/秒。

我的问题是我尝试运行的程序需要很多时间(以小时为单位)。这意味着 clock() 函数(返回一个 long int)返回一个垃圾值(因为 max long int 不够大)

有什么建议(除了估计内部循环的时间并将它们加起来什么的)?

long t1 = clock();
function();
long t2=clock();

time = ((double)t2 - t1) / CLOCKS_PER_SEC
4

7 回答 7

5

如果你在 Linux / Unix 下运行它,你可以说:

time my_process
于 2010-11-12T21:48:40.023 回答
3

用百分比误差来考虑问题。

如果您的程序需要几个小时才能运行(假设 4 小时……或 14,400 秒),那么 1/2% 的错误是 72 秒,或略多于一分钟。

换句话说,要得到百分之一的 1/2 以内的准确答案,您只需要计时到最近的一分钟。假设手持秒表的计时可以在一秒甚至 1/10 秒之内,那么您的错误将微不足道。

我的观点是,您只需使用秒计时器或手持秒表即可准确测量您的程序。

于 2010-11-12T21:49:40.423 回答
1

如果程序长时间运行,那么亚秒级精度可能不是特别重要。在那种情况下,为什么不打电话time()呢?

于 2010-11-12T21:49:24.083 回答
0

增压计时器工作良好。

计时器库提供了一个用于测量经过时间的计时器类、一个用于报告经过时间的progress_timer 类和一个用于显示目标进度指示的progress_display 类。

于 2010-11-12T21:48:54.347 回答
0

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 位,因此它可以存储小时数。

于 2010-11-12T21:50:04.460 回答
0

如果精度(由诸如 queryPerformanceTimer 之类的赢调用给出)不重要,我会采用 getTimeofTheDay 类型的方法(由@osgx 建议)。

于 2010-11-12T22:29:42.657 回答
0
#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;

}

于 2014-04-02T04:11:40.400 回答