可能的重复:
C++ 定时器函数提供以纳秒为单位的时间 https://stackoverflow.com/questions/275004/c-timer-function-to-provide-time-in-nano-seconds
我需要以纳秒分辨率测量函数执行的持续时间。是否可以?我们普通的计算机硬件和软件能够给出这么精确的时间吗?如果是的话如何用c++实现? Boost库可以吗?
是的,如今大多数硬件都支持这种分辨率,并且 C++ 标准库也有一个 API 可以支持它。不幸的是,并非所有 C++ 实现实际上都提供了它。
API 是<chrono> http://en.cppreference.com/w/cpp/chronoC++11中引入的库:
#include <iostream>
#include <chrono>
int main() {
auto start = std::chrono::high_resolution_clock::now();
// operation to be timed ...
auto finish = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish-start).count() << "ns\n";
}
The <chrono>
Darwin 的 libc++ 实现提供了纳秒分辨率,但 VS2012 中的实现似乎只达到了十分之一毫秒。上面的代码仍将以纳秒为单位给出时间,但小于 100 微秒的计时最终将为零纳秒。
Boost 还提供了一个实现 boost::chrono,它似乎在 Windows 上使用纳秒。它也可与 C++03 一起使用。
#include <boost/chrono.hpp>
int main() {
boost::chrono::high_resolution_clock::time_point t1 =
boost::chrono::high_resolution_clock::now();
boost::chrono::high_resolution_clock::time_point t2 =
boost::chrono::high_resolution_clock::now();
std::cout << boost::chrono::duration_cast<boost::chrono::nanoseconds>(t2-t1) << "\n";
// boost chrono has more advanced output, .count() isn't needed, nor is manually writing out the units
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)