系统相关
首页 > 系统相关> > Linux下C++跨平台获取高精度时间戳

Linux下C++跨平台获取高精度时间戳

作者:互联网

简介


C++语言本身及Linux操作系统均提供了时钟相关的函数,可以方便获取时间。

但是,在一些场合下,需要的时间精度不同,又不能通用。

如果依赖于Linux平台,又不能做到跨平台。

所以优化考虑使用C++语言本身提供的函数。

本文介绍使用 std::chrono 命名空间下的函数来获取时间戳。需要 c++11 支持。

关于时间函数的介绍,请参考 Linux c++获取本地毫秒级精确时间

获取时间跨度


在测试一段程序的耗时时,经常需要统计时间跨度。

示例代码如下:

int countTimeConsume()
{
    using namespace std::chrono;

    high_resolution_clock::time_point t1 = high_resolution_clock::now();

    std::cout << "printing out 1000 stars...\n";
    for (int i = 0; i < 1000; ++i)
        std::cout << "*";
    std::cout << std::endl;

    high_resolution_clock::time_point t2 = high_resolution_clock::now();

    duration<double, std::milli> time_span = t2 - t1; // 根据需要的精度调整参数

    std::cout << "It tooks me " << time_span.count() << " ms\n";

    return 0;
}

获取本地时间戳


有时,需要的是当时的时间戳,这样方便记录统计。

代码如下:

auto ts = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 根据需要调整时间精度,这里是us
// 返回类型为int64_t

小结


时间统计在对程序进行性能分析和优化时经常使用,可以封装到公用类中使用。

注意,由于Linux系统不是实时操作系统,当时间精度特别小时,可能会有一定误差。

标签:std,chrono,C++,获取,跨平台,时间,Linux
来源: https://blog.csdn.net/guotianqing/article/details/113782104