检索C中两次迭代之间花费的时间

时间:2016-03-08 13:26:35

标签: c multithreading clock

我有线程运行,线程函数包含一个循环并迭代一段时间。

例如:

void *start(void *p) // This function is called at the thread creation
{
      int i = 0;

      while (i < 10){
          i++;
      }
} // NOTE THAT THIS FUNCTION IS AN EXAMPLE, the iteration can be small or high.

我如何监控两次迭代之间的时间? (考虑到我有很多线程同时运行它的事实)

我听说过clock()函数,以及以下操作来确定两个clock()输出之间的时间:

(double)(begin - end) / CLOCKS_PER_SEC;

我如何以有效的方式检索此类信息?

1 个答案:

答案 0 :(得分:2)

我建议使用POSIX函数clock_gettime

#include <time.h>

timespec real_startTime;
timespec real_endTime;      

// Start time measurement
if(clock_gettime(CLOCK_REALTIME, &real_startTime) != 0)
{
    perror("Error on fetching the start-time");
    exit(EXIT_FAILURE);
}

// Do some long running operation that should be measured

// Stop time measurement
if(clock_gettime(CLOCK_REALTIME, &real_endTime) != 0)
{
    perror("Error on fetching the end-time");
    exit(EXIT_FAILURE);
}

double real_runTime = (real_endTime.tv_sec + real_endTime.tv_nsec / 1000.0 / 1000.0 / 1000.0) - (real_startTime.tv_sec + real_startTime.tv_nsec / 1000.0 / 1000.0 / 1000.0);

与时钟的区别在于它输出挂钟时间,&#34;真实&#34;通过执行某些操作(包括I / O等)的时间,而不是基于 CPU时间clock

摘录clock_gettime man:

  

所有实现都支持系统范围的实时时钟,由CLOCK_REALTIME标识。它的时间代表自纪元以来的秒和纳秒。

摘录时钟人:

  

clock()函数返回所用处理器时间的近似值          通过该计划。

编辑: 正如许多人所建议的那样,你不会在你的示例代码中遇到任何真正的区别(计算一个从0到10的整数),但是如果你测量一些长时间运行的系统,一个做I / O的系统等,你将会这样做。) p>