【发布时间】:2016-09-26 21:35:44
【问题描述】:
我想知道上述常量的返回值有什么区别。
sysconf(_SC_CLK_TCK) 返回 100
CLOCKS_PER_SEC 返回 1,000,000
所以,假设我有这个:
...
start = clock();
// Process starts here
/* does something */
// Process ends here
end = clock();
double time = ((double) end-start)/CLOCK_PER_SEC; // this would return in seconds
...
如何计算进程使用的刻度数,而不是时间?我是否使用针对 sysconf(_SC_CLK_TCK) 或 CLOCK_PER_SEC 的时间?
我正在尝试了解它们的用法。
【问题讨论】:
-
我不明白你在问什么。
clock()返回速率由CLOCK_PER_SEC给出的“滴答数”。 -
CLOCKS_PER_SEC不返回任何东西,它是为预处理器定义的值。而sysconf是一个非标准的函数,它返回有关它所运行的操作系统的信息。 -
@WeatherVane:这是 POSIX 的标准。不在 C 中,是的。
-
不要使用
clock()。使用#define _POSIX_C_SOURCE 200809L、#include <time.h>和clock_gettime()。拥有struct timespec ts;,调用clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);,您将有CPU 花费的时间在ts.tv_sec中运行此进程,单位为秒加上ts.tv_nsec中的纳秒(0 到999,999,999)。使用CLOCK_THREAD_CPUTIME_ID表示当前线程花费的CPU 时间,CLOCK_REALTIME或CLOCK_MONOTONIC表示挂钟。 (两者都不受 DST 更改等的影响,后者甚至不受手动更改的影响。)
标签: c linux time process clock