在C ++ / boost中以* nix检索时间最高效的方法是什么?

时间:2014-09-02 01:46:58

标签: c++ unix boost

我知道这个问题有太多的变数可以得到一个答案,但非常感谢您帮助我们了解这些选项。

我的应用程序需要从网络接收大量事件,并且需要在到达时至少以毫秒分辨率“标记”每条消息,以便稍后根据这些时间戳执行大量计算。

我过去的经验告诉我,以高速率获取时钟时间是性能杀手,因为它们转换为系统/内核调用。在C ++的Unix环境中是否存在“最差的选项”?

作为起点我现在正在使用“boost :: posix_time :: microsec_clock :: local_time()”

,这取决于microsec分辨率(我不需要),这给了我一个绝对时间(原则上我可以使用相对于任何纪元的相对偏移)。

我最好的选择是什么?

2 个答案:

答案 0 :(得分:2)

我不能说哪个更快,但你有没有想过你需要什么样的时间?

  • clock(3):CPU滴答声......对性能测试很有用,但不能用于计时网络呼叫或时间戳。
  • clock_gettime(3) CLOCK_MONOTONICUnalterable time ...对timing network calls有用。
  • gettimeofday(2):壁垒时间...对时间戳和性能测试很有用。

确保您选择的方法适合您的需要。

答案 1 :(得分:0)

以下为您获取以微秒为单位的时间戳(您认为这对您来说太过分了)。 很容易调整除法/乘法以获得微秒:

const uint32_t getTime()
{

    struct timeval  tv;
    struct timezone tz;
    struct tm      *tm;

    gettimeofday(&tv, &tz);
    tm = localtime(&tv.tv_sec);

    return (tm->tm_hour * 3600000000/*3600 * 1000 * 1000*/) +
    (tm->tm_min * 60000000/*60 * 1000 * 1000*/) +
    (tm->tm_sec * 1000000/*1000 * 1000*/) +
    (tv.tv_usec);
}