获取当地时间纳秒[复制](Get local time in nanoseconds [duplic

2019-08-01 14:02发布

可能重复:
C ++计时器功能以提供在纳米秒时间

我需要衡量纳秒分辨率的功能执行的时间。 可能吗? 我们的普通计算机的硬件和软件都能够给出这样的时间精度? 如果是如何完成与C ++? 是否有可能与Boost库?

Answer 1:

是的,今天的大多数硬件支持这种分辨率,和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
}


Answer 2:

关于您可以使用Windows API做的最好的是QueryPerformanceCounter的 。 您可以获取其分辨率QueryPerformanceFrequency的 。 根据不同的情况,这可能是使用CPU的RDTSC指令,在这种情况下,频率基本上是CPU的时钟频率。 在其他情况下,它使用与1.024兆赫的频率独立的时钟,所以分辨率基本上是一微秒。

C ++ 11增加了一个chrono类,可能是有用的-假设你使用的是已经有它的编译器。 如果你的编译器不提供一个实现, 升压计时是一个合理的替代品与大多数现有的编译器/库工作。 同样,也不能保证它会提供纳秒级的分辨率,但是我希望在Windows上它很可能会围绕QPC / QPF便携式包装,所以它很可能给他们做同样的分辨率,只是更加便携。



Answer 3:

我不知道,如果你正在寻找时钟或difftime,但其中一个应该是你在找什么:

http://www.cplusplus.com/reference/clibrary/ctime/clock/

http://www.cplusplus.com/reference/clibrary/ctime/difftime/

您可以前后的功能使用和运行时间比较的差异看功能的整体运行。



Answer 4:

当然也有好老的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();

只有微秒,虽然。



文章来源: Get local time in nanoseconds [duplicate]