可能重复:
C ++计时器功能以提供在纳米秒时间
我需要衡量纳秒分辨率的功能执行的时间。 可能吗? 我们的普通计算机的硬件和软件都能够给出这样的时间精度? 如果是如何完成与C ++? 是否有可能与Boost库?
可能重复:
C ++计时器功能以提供在纳米秒时间
我需要衡量纳秒分辨率的功能执行的时间。 可能吗? 我们的普通计算机的硬件和软件都能够给出这样的时间精度? 如果是如何完成与C ++? 是否有可能与Boost库?
是的,今天的大多数硬件支持这种分辨率,和C ++标准库有能够支持它,以及一个API。 不幸的是没有C ++的所有实现其实也提供。
该API是<chrono>
在C ++ 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";
}
该<chrono>
在达尔文的libc ++实现提供纳秒级的分辨率,但它似乎在VS2012的实施只到毫秒的十分之一。 上面的代码将仍然给次纳秒的条件,但定时小于100微秒最终会被零纳秒。
升压还提供了一个实行,提振::时辰,这似乎在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
}
关于您可以使用Windows API做的最好的是QueryPerformanceCounter的 。 您可以获取其分辨率QueryPerformanceFrequency的 。 根据不同的情况,这可能是使用CPU的RDTSC指令,在这种情况下,频率基本上是CPU的时钟频率。 在其他情况下,它使用与1.024兆赫的频率独立的时钟,所以分辨率基本上是一微秒。
C ++ 11增加了一个chrono
类,可能是有用的-假设你使用的是已经有它的编译器。 如果你的编译器不提供一个实现, 升压计时是一个合理的替代品与大多数现有的编译器/库工作。 同样,也不能保证它会提供纳秒级的分辨率,但是我希望在Windows上它很可能会围绕QPC / QPF便携式包装,所以它很可能给他们做同样的分辨率,只是更加便携。
我不知道,如果你正在寻找时钟或difftime,但其中一个应该是你在找什么:
http://www.cplusplus.com/reference/clibrary/ctime/clock/
http://www.cplusplus.com/reference/clibrary/ctime/difftime/
您可以前后的功能使用和运行时间比较的差异看功能的整体运行。
当然也有好老的boost :: DATE_TIME :
#include <boost/date_time/posix_time/posix_time.hpp>
boost::posix_time::ptime date_time = boost::posix_time::microsec_clock::universal_time();
只有微秒,虽然。