如何将tv_sec和tv_usec的时间组合成一个实体?什么是安全的?

时间:2014-09-28 02:02:15

标签: c++ time unix-timestamp double-precision

所以我需要做一些精确计时,并努力使用tv_sec和tv_usec。现在我,超级凌乱,有一个我自己的家庭卷Tuple类的矢量,持有秒和微秒。

这里的问题是......如果我想说...在我的向量中获取最早的条目,我必须对元组中的值进行超毛和粗略的比较。

我真的想将tv_sec和tv_usec组合成一个值来存储。这将使比较变得非常容易。

但是如何安全地做到这一点?例如,这种尝试是否会在某些价值观中爆炸?

gettimeofday(&tv, NULL);
time_t secs = tv.tv_sec;
time_t msecs = tv.tv_usec;
double the_answer = tv_sec + (1.0/1000000) * tv_usec; //ehhhh? Maybe?

我把这个问题归结为 - 如果我使用它会溢出/行为怪异/毁了我:

    double the_answer = tv_sec + (1.0/1000000) * tv_usec; //ehhhh? Maybe?

1 个答案:

答案 0 :(得分:0)

如果您在上一个千禧年陷入困境,请使用std::chronoboost::chrono。该标准给出了每个单元需要多少位的要求,并且API 真的很好。

所需位数(包括符号位)为:

  • 23小时
  • 29分钟
  • 35 for seconds
  • 45毫秒
  • 55微秒
  • 64 for nanoseconds

纳秒,这些将持续到2262年。