作为计时器,clock()是可靠的吗?
Is clock() reliable for a timer?
我正在使用clock(),我想知道它是否会重置或达到最大值。所有我使用它只是太主题,从以前的函数调用,并找到差异。
感谢到目前为止的帮助,但我不是真的能够得到chrono的东西在VS '12工作,但它很好,因为我认为它比我需要的多一点,我在考虑使用's time(),但我不知道如何将t_time转换成一个int,只包含当前秒0-60,任何帮助?
就标准而言,
clock_t
和time_t
中可表示的时间范围和精度由实现定义。
(C99,§7.23.1¶4)
所以不能保证范围;clock()
的定义没有提到任何关于环绕的内容,尽管它说
如果使用的处理器时间不可用或其值不能表示,则函数返回值
(clock_t)(-1)
所以我们可以说,超过clock_t
的范围可以看作是"它的值不能被表示";另一方面,这种解释意味着,一段时间后,clock()
将变得完全无用。
事实上,如果我们深入到一个特定的实现(glibc),我们会看到:
matteo@teokubuntu:~$ man 3 clock
Note that the time can wrap around. On a 32-bit system where CLOCKS_PER_SEC equals 1000000 this function will return the same value approximately every 72 minutes.
这取决于您使用的是什么系统。它可以使用32+或64位clock_t
。它肯定会翻滚,但如果它是64位的,在它翻滚之前它会好一段时间- 264微秒仍然是一段很长的时间(大约244秒,每天大约有216秒,所以228天-这大约是220,或者一百万年……;)
然而,在某些系统中,另一个问题是clock()
返回CPU使用时间,因此如果您睡眠,它将不计入clock()
中的时间。
当然,即使CLOCKS_PER_SEC
可能是1000000,这并不意味着你得到了微秒的结果——在许多系统中,它一次"跳跃"10000个单位。
如果你的系统上有c++ 11,请使用std::chrono
,它有几个计时选项,对于大多数用途来说已经足够好了(但要研究std::chrono
文档)
示例代码:
#include <iostream>
#include <chrono>
#include <unistd.h> // replace with "windows.h" if needed.
int main()
{
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
// 10 seconds on a unix system. Sleep(10000) on windows will be the same thing
sleep(10);
end = std::chrono::system_clock::now();
int elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>
(end-start).count();
std::cout << "elapsed time: " << elapsed_seconds << "sn";
}
简单的答案是,如果您只是使用它来计时一个函数,它可能不会绕行。它也可能太慢,您可能会看到函数持续时间为零。如果你想要一个快速执行的函数的精确计时,你可能最好使用像Windows上这样的操作系统级别的调用。
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- 保留计时器集合(对象与指针)的最佳方法
- 在网络套接字计时器滴答后增加asio短读错误
- 是否可以仅使用标准 c++/c++11 实现不带"sleep"的计时器?
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 计时器坏了或者其他什么的
- 功能计时器阻止主功能继续
- IO服务重新启动后,Boost最后期限计时器持续触发
- 为什么在使用基于 clock() 的计时器宏时会得到负值
- 计时器精度:c clock( ) vs. WinAPI 的 QPC 或 timeGetTime( )
- 作为计时器,clock()是可靠的吗?