以纳秒为单位获取当地时间

Nar*_*rek 14 c++ time benchmarking boost

可能重复:
C++定时器功能,以纳秒为单位提供时间

我需要以纳秒分辨率来测量函数执行的持续时间.可能吗?我们普通的计算机硬件和软件能够给出如此精确的时间吗?如果是,如何使用c ++实现这一目标?是否可以使用Boost库?

bam*_*s53 43

是的,今天大多数硬件都支持这种解决方案,而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";
}
Run Code Online (Sandbox Code Playgroud)

<chrono>在达尔文的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
}
Run Code Online (Sandbox Code Playgroud)