在纳秒中获得当地时间

Get local time in nanoseconds

本文关键字:当地时间      更新时间:2023-10-16

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

我需要测量纳秒分辨率中函数执行的持续时间。是否可以?我们普通的计算机硬件和软件能够为时间提供如此精确的时间吗?如果是,如何使用C 实现这一目标?Boost Library是否可以?

是的,今天,大多数硬件都支持这种分辨率,并且C 标准库具有也可以支持它的API。不幸的是,并非所有C 的实现实际上都提供了。

API是C 11中引入的<chrono>库:

#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() << "nsn";
}

darwin中LIBC 中的<chrono>实现提供了纳秒分辨率,但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
}

我不确定您是在寻找时钟还是差异,但是其中之一应该是您要寻找的东西:

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

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

您可以在功能前后使用它,并比较运行时间的差异以查看功能的整体运行时。

关于您可以使用Windows API的最佳功能是QueryPerformanceCounter。您可以通过查询性能频率获得其分辨率。根据情况,可以使用CPU的RDTSC指令,在这种情况下,频率基本上是CPU的时钟频率。在其他情况下,它使用一个单独的时钟,频率为1.024 MHz,因此分辨率基本上是一微秒。

c 11添加了一个可能有用的chrono类 - 假设您使用的是已经具有它的编译器。如果您的编译器不提供实现,则BOOST CHRONO是与大多数现有编译器/库一起使用的合理替代品。同样,不能保证它会提供纳秒分辨率,但是我希望在窗口上可能是QPC/QPF周围的便携式包装器,因此它可能会提供与他们所做的相同分辨率,更便宜。

,当然还有良好的旧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();

仅MICROSEC。