【问题标题】:sysconf(_SC_CLK_TCK) vs. CLOCKS_PER_SECsysconf(_SC_CLK_TCK) 与 CLOCKS_PER_SEC
【发布时间】: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


【解决方案1】:

根据文档,clock() 以CLOCKS_PER_SEC 的分辨率返回时间。

其他时间函数以ticks 为单位返回值。 sysconf(_SC_CLK_TCK) 提供每秒的滴答数。一个这样的时间函数是times()。

【讨论】:

  • 那么,假设在没有CLOCKS_PER_SEC 的time = ((double) end-start 中,这将以微秒为单位测量时间,对吧?是否有必要除以CLOCKS_PER_SEC 才能在几秒钟内实际获得它,还是可以将其除以 1,000,000 以在几秒钟内获得它?我的意思是,它们都具有相同的值。所以我不太确定。要获得滴答数,我只需要int ticks = time * sysconf(_SC_CLK_TCK,对吗?
  • 如cmets中所说,可以使用的功能比较少。但是,坚持记录在案的接口。虽然不太可能,但 CLOCKS_PER_SEC 的定义可能会改变。
猜你喜欢
  • 2013-11-24
  • 2014-09-25
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多