1

对不起,我是 C 的新手。但我做错了什么?几乎尝试了所有方法,但仍然无法计算在 t1 和 t2 之间执行代码所经过的秒数,总是返回我 Finished in 0.00 seconds。谢谢你的耐心 :)

#include <time.h>

clock_t t1, t2;

t1 = clock();
sleep(5);
t2 = clock();
printf("\nFinished in %.2f seconds.\n\n", (t2-t1)*1.0/CLOCKS_PER_SEC);
4

3 回答 3

1

如果粗粒度(整秒)可以,也许time(2)并且time_t足够好。

例子:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

static time_t t1, t2;

int
main(void)
{
  t1 = time(0);
  (void) sleep(5);
  t2 = time(0);

  (void) printf("\nFinished in %d seconds.\n\n", (int) (t2-t1));

  return 0;
}
于 2013-09-11T19:25:18.757 回答
0

似乎clock_t没有考虑输入“墙上时间”,而是 CPU 时间。CPU 在休眠 5 秒时没有有效地执行代码。

于 2013-09-11T15:49:44.153 回答
0

clock()不适用于测量经过的时间。它的分辨率通常非常低,它只测量 CPU 时间,而不是墙上时间。如果你的目标是 Unix,你应该使用clock_gettime(CLOCK_MONOTONIC, ...). 在 WindowsQueryPerformanceCounter()上是要使用的 API。

值得注意的是,这gettimeofday()也是不合适的,因为它受闰秒的影响和网络时间协议的调整。

于 2013-09-11T17:09:20.757 回答