获取在C中运行函数的时间量

时间:2011-11-16 02:43:27

标签: c time

所以这是非常基本的,但我真的不知道C.

我想找到运行所需的毫秒数,而不是时钟(CPU)周期。

我尝试使用

struct timeval start,end;
double dif;

gettimeofday(&start, 0);
//do stuff
gettimeofday(&end, 0);
dif = (end - start) / 1000.0;
printf("The time taken was %lf \n",dif);

我正在尝试编译时收到此错误:

  

bubble.c:在函数'main'中:
bubble.c:55:错误:无效   操作数为二进制 - (具有'struct timeval'和'struct timeval')

5 个答案:

答案 0 :(得分:3)

更改

dif = (end - start) * 1000;

dif = (end.tv_sec - start.tv_sec) * 1000 
+ (end.tv_usec - start.tv_usec) / 1000;

在伪代码中:

Get the seconds part of the time delta
Multiply by 1000 to get milliseconds
Get the microseconds part of the time delta
Divide that part by 1000
Add that part to the milliseconds from seconds delta

答案 1 :(得分:1)

你想:

dif = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000.0;

注1:你需要tv_sec来处理一个短暂的持续时间,然后再过了一秒钟。

注2:第二项除以1000.0,以便使用浮点而不是整数除法。

答案 2 :(得分:0)

为了快速制作基准,我会使用clock()CLOCKS_PER_SEC

这是我使用的一些宏代码:

#define CLOCK_TICK(acc, ctr)  ctr = std::clock()
#define CLOCK_TOCK(acc, ctr)  acc += (std::clock() - ctr)
#define CLOCK_RESET(acc) acc = 0
#define CLOCK_REPORT(acc) (1000. * double(acc) / double(CLOCKS_PER_SEC))

static clock_t t1a, t1c;


int main()
{
   while (true)
   {
     CLOCK_RESET(t1a);
     init_stuff();
     CLOCK_TICK(t1a, t1c);
     critical_function();
     CLOCK_TOCK(t1a, t1c);

     std::cout << "This round took " << CLOCK_REPORT(t1a) << "ms.\n";
   }
}

您可以从新的<chrono>标头中获取更高分辨率的时钟。宏应该是直截了当的。

答案 3 :(得分:0)

  1. 确保包含正确的标题(“#include”)

  2. 使用“timersub()”来获取差异,而不是减去end-start:

  3. http://linux.die.net/man/3/timeradd

    '希望有所帮助.. PSM

答案 4 :(得分:0)

在Linux上,实现此目的的最佳方法是使用times(2)接口而不是gettimeofday(2)读取手册页。

  男人2次。

它具有精致的保真度。