如何使用Boost库计算两个时间戳之间的微秒时间差

时间:2014-06-20 10:19:58

标签: c++ boost time

更新:代码现在正确编译

我想计算两个时间戳之间的时差。分辨率很重要,因此必须以微秒/毫秒为单位。

我尝试了以下但结果没有意义:

boost::posix_time::ptime before = (&input[0])->timestamp;
boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();

boost::posix_time::time_period tp (before, now);
std::string str (boost::posix_time::to_simple_string (tp));
cout << str.c_str() << endl;

我得到的结果如下:

[2014-Jun-20 12:26:07.711182/2014-Jun-20 12:26:07.711596]

我怎样才能获得以下内容?

76 μs

2 个答案:

答案 0 :(得分:5)

你可以使用

std::cout << (now - before).total_microseconds() << " µs\n";
std::cout << (now - before).total_milliseconds() << " ms\n";

这完全符合您的要求(打印例如76 µs314 ms

答案 1 :(得分:2)

我建议使用boost :: chrono

boost::chrono::system_clock::time_point before =
        boost::chrono::system_clock::now(); 
//do some work
boost::chrono::system_clock::time_point now =
        boost::chrono::system_clock::now(); 
boost::chrono::nanoseconds t = boost::chrono::duration_cast<boost::chrono::nanoseconds>(now-before);
std::cout << t.count() << "\n";

为什么要提升计时? Boost.Chrono vs. Boost.Date_Time

如果你需要一个非常简单的解决方案(没有提升链接),只需使用:

inline unsigned long long getCurrentNanos()
{
    timespec tv;
    clock_gettime(CLOCK_REALTIME, &tv);

    return tv.tv_sec*1000000000 + tv.tv_nsec;
}
//...
unsinged long long start = getCurrentNanos();
//do some work
std::cout << getCurrentNanos() - start << '\n';