【问题标题】:What's the best alternative library to gettimeofday() in C++?C++ 中 gettimeofday() 的最佳替代库是什么?
【发布时间】:2011-01-12 23:37:07
【问题描述】:

在 Linux 上的 C++ 中使用 gettimeofday() 是否有更多面向对象的替代方法?例如,我喜欢能够编写类似这样的代码:

DateTime now = new DateTime;
DateTime duration = new DateTime(2300, DateTime.MILLISECONDS)
DateTime deadline = now + duration;

while(now < deadline){
    DoSomething();
    delete now;
    now = new DateTime()
}

目标是嵌入式 linux 系统,没有 Boost 库,但可能有一些易于移植的东西(例如仅用头文件实现的东西)。

【问题讨论】:

  • 哦,哎呀,我错过了“无增强库”条款。 叹息
  • 嗯,Boost.Date_Time 应该很容易移植。此外,您真的不应该使用 new 分配本地对象,尤其是在嵌入式系统上。

标签: c++ linux time embedded gettimeofday


【解决方案1】:

我认为你应该可以使用 ctime 的东西

#include <ctime>

time
difftime
mktime

应该以非常便携的方式完成这项工作。 cplusplus.com

【讨论】:

  • 我看了这个,但是分辨率太粗了。我想降低到毫秒分辨率。
【解决方案2】:

标准 C++ 库中没有用于处理时间和间隔的面向对象的接口。

你可能想看看Boost.Date_TimeBoost 非常有用且写得很好,它实际上是标准 C++ 库的一部分。

【讨论】:

    【解决方案3】:
    /usr/include/linux/time.h 
    

    给出结构:-

    struct timeval {
        time_t      tv_sec;     /* seconds */
        suseconds_t tv_usec;    /* microseconds */
    };
    

    在 Linux 上,也许你可以使用它...

    【讨论】:

      【解决方案4】:

      所以移植提升不是我的目标的选择。相反,我不得不使用 gettimeofday()。然而,sys/time.h 中有一些很好的宏用于处理 timeval 结构

      #include <sys/time.h>
      
      void timeradd(struct timeval *a, struct timeval *b,
                struct timeval *res);
      
      void timersub(struct timeval *a, struct timeval *b,
                struct timeval *res);
      
      void timerclear(struct timeval *tvp);
      
      void timerisset(struct timeval *tvp);
      
      void timercmp(struct timeval *a, struct timeval *b, CMP);
      

      但我花了一段时间才找到它们,因为它们不在我机器上的手册页中。请参阅此页面: http://linux.die.net/man/3/timercmp

      【讨论】:

        猜你喜欢
        • 2011-06-17
        • 1970-01-01
        • 2015-09-18
        • 1970-01-01
        • 2010-10-12
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多