在C++中了解clock()和CLOCKS_PER_SEC

3

我希望准确地计时C++应用程序。似乎有多个“时间”的定义,但就这个问题而言…… 我感兴趣的是我在现实世界中看到的手表时间……如果这有任何意义的话!无论如何,在我的应用程序中,我的起始时间是这样完成的:

clock_t start = clock();
.
.
. // some statements
.
.
clock_t end = clock();
.
.
double duration = end - start;
.
.
cout << CLOCKS_PER_SEC << endl;

start等于184000 end等于188000 CLOCKS_PER_SEC等于1000000

这是否意味着持续时间(秒)等于4000/1000000?如果是的话,这意味着持续时间为.004秒?有更准确的测量方法吗?

谢谢


我认为你正在寻找C++中的毫秒数 - garakchy
1
嗨,Garakchy。我怎样才能在这里捕获毫秒? - code
1
毫秒数是否等于 diffticks / (CLOCKS_PER_SEC / 1000)? - code
1
啊,是的...如果我算得正确的话...时钟数 x (1000 毫秒 / 每秒时钟数) 等于毫秒数。 - code
提高准确性的一个小方法是,在调用 clock() 时,代码位于0.0到1.0个时钟节拍之间。通过执行 clock_t start, t; t = clock(); while ((start = clock()) == t); 将减少开始时间的变化。对于 end 调用帮助不大。 - chux - Reinstate Monica
(CLOCKS_PER_SEC / 1000) 不好。举例说明,如果 CLOCKS_PER_SEC 是 999,那么 (CLOCKS_PER_SEC / 1000) 将会是 0。更好的做法是 (diffticks * 1000 + CLOCKS_PER_SEC/2)/ CLOCKS_PER_SEC,但要注意溢出的问题。 - chux - Reinstate Monica
1个回答

1
尝试使用此方法以达到纳秒级的时间精度。
struct timespec start, end;
clock_gettime(CLOCK_REALTIME,&start);
/* Do something */
clock_gettime(CLOCK_REALTIME,&end);

它返回一个值,如((((unsigned64)start.tv_sec) * ((unsigned64)(1000000000L))) + ((unsigned64)(start.tv_nsec))))

如果您觉得这很有用,请还要参考this链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接