C ++中最好,最准确的计时器是什么?
答案 0 :(得分:12)
对此的答案是特定于平台的。操作系统负责跟踪时序,因此,C ++语言本身不提供语言结构或内置函数来执行此操作。
但是,以下是与平台相关的计时器的一些资源:
SetTimer
:http://msdn.microsoft.com/en-us/library/ms644906(v=vs.85).aspx setitimer
:http://linux.die.net/man/2/setitimer 跨平台解决方案可能是boost::asio::deadline_timer。
答案 1 :(得分:12)
在C ++ 11中,您可以通过以下方式移植到最高分辨率的计时器:
#include <iostream>
#include <chrono>
#include "chrono_io"
int main()
{
typedef std::chrono::high_resolution_clock Clock;
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << t2-t1 << '\n';
}
示例输出:
74 nanoseconds
“chrono_io”是一个可以轻松解决这些新类型的I / O问题的扩展程序,可以免费使用here。
还有一个<chrono>
的实现可用于boost(可能仍然在主干上,不确定它是否已被释放)。
答案 2 :(得分:2)
在Windows下它将是QueryPerformanceCounter
,虽然看到你没有指定任何条件,但可能有一个外部超高分辨率计时器,它有一个驱动程序的c ++接口
答案 3 :(得分:2)
C ++标准并没有充分说明时间。通过<ctime>
标题从C继承了一些功能。
函数clock
是获得亚秒精度的唯一方法,但精度可能低至一秒(由宏CLOCKS_PER_SEC
定义)。此外,它根本不测量实时,而是处理器时间。
函数time
测量实时,但(通常)仅测量最近的秒。
要以亚秒精度测量实时,您需要一个非标准库。