C - 程序的执行时间(以毫秒为单位),使用 <time.h>



我试图使用时间头获得程序的执行时间,无法找到任何简单使用<time.h>而不是<sys/time.h>的资源。

我试着

 time_t startTime;                
 time_t endTime;                 
 long double execTime;           
 /* Start timer */
 time(&startTime);
 ..STUFF THAT TAKES TIME..
time(&endTime); 
execTime = difftime(endTime, startTime); 
printf("Computing took %Lfn", execTime * 1000);

但是这个每次都输出0 ..我猜,因为时间是一个整数,我的过程需要不到一秒。

如何以毫秒为单位显示执行情况?

谢谢

虽然clock_gettime应该是首选的方式,但它是Posix,而不是标准c。他们只有clock。它有很多缺点,但对于快速而肮脏的测量来说已经足够好了。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
  int i, j, a[1000000] = { 0 };
  clock_t start, stop;
  srand(0xdeadbeef);
  start = clock();
  // play around with these values, especially with j
  for (j = 0; j < 100; j++) {
    for (i = 0; i < 1000000; i++) {
      a[i] = rand() % 123;
      a[i] += 123;
    }
  }
  stop = clock();
  printf("Time %.10f secondsn", (double) (stop - start) / CLOCKS_PER_SEC);
  exit(EXIT_SUCCESS);
}

正确测量时间的方法是使用clock_gettime(CLOCK_MONOTONIC, &ts_current);

同时,gettimeofday()也应该避免。

使用clock_gettime()测量时差(秒和纳秒,可以转换为毫秒)的完整示例:

#include <stdio.h>
#include <time.h>
struct timespec diff(struct timespec start, struct timespec end)
{
    struct timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}
int main()
{
    struct timespec time1, time2;
    int temp = 0;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
    for (int i = 0; i< 242000000; i++)
        temp+=temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    printf("Time difference: %ld [s] %ld [ns]", (long) diff(time1,time2).tv_sec, (long) diff(time1,time2).tv_nsec);
    return 0;
}

time函数只有1秒分辨率。相反,请使用具有微秒级分辨率的gettimeofday

struct timeval tstart, tend;
gettimeofday(&tstart, NULL);
// do something that takes time
gettimeofday(&tend,NULL);

最新更新