对不起,我是 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);
如果粗粒度(整秒)可以,也许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;
}
似乎clock_t
没有考虑输入“墙上时间”,而是 CPU 时间。CPU 在休眠 5 秒时没有有效地执行代码。
clock()
不适用于测量经过的时间。它的分辨率通常非常低,它只测量 CPU 时间,而不是墙上时间。如果你的目标是 Unix,你应该使用clock_gettime(CLOCK_MONOTONIC, ...)
. 在 WindowsQueryPerformanceCounter()
上是要使用的 API。
值得注意的是,这gettimeofday()
也是不合适的,因为它受闰秒的影响和网络时间协议的调整。