跨平台毫秒计时器持续超过49天?

时间:2010-04-06 13:49:58

标签: c++ c dedicated-server

我将开发一个C / C ++的小型专用服务器,需要永久的正常运行时间。我一直在研究一些时间函数,因为计算需要毫秒计时。我遇到了两个问题:

  1. 使用32位整数来存储自操作开始以来的毫秒数将在大约49天标记处重置为零。我已经考虑过使用64位整数,使用gettimeofday来检索微秒,但这将我带到第二部分。

  2. 似乎没有任何标准系统调用来获取与平台无关的经过的毫秒数

  3. 我该怎么做才能解决这两个问题?

4 个答案:

答案 0 :(得分:6)

  1. 使用64位整数,假设给你足够的时间

  2. 你是对的;没有标准。一种可能性是使用Boost DateTime库,交替找到另一个或自己动手。

  3. 祝你好运!

答案 1 :(得分:2)

正如已经说过的那样,你要面对的第一个问题是获得一个可靠的毫秒精确时间。

我承认我对这个问题有点分阶段。

我可以理解精确定时的需要(毫秒级,甚至是微秒级)但是在毫秒级别定时50天似乎......很奇怪。

您或许应首先检查您的需求,但很少需要超过6或7位有效数字...而且我担心您正试图让所有持续时间对象都适合它们。

也许您应该将持续时间分类:

  • 最多几分钟>使用毫秒精度
  • 否则>使用第二精度(1970年1月1日以来的着名计数)

因为......在2个月的规模上,1/10秒的感觉是什么?

答案 2 :(得分:0)

显而易见的。将64位整数与特定于平台的代码一起使用以获得毫秒数。在包括OSX的Unix上,您需要gettimeofday。在Windows上,祝您获得可靠的毫秒级粒度时间源; code in the Tcl library to do this非常复杂,因为该地区有一些邪恶的陷阱。

答案 3 :(得分:0)

回答1:如果您测量的“毫秒时间”在20天左右,您可以将时间减去无符号值,并将结果检查为有符号值。这应该给出包装定时器的正确结果(从0xffffffff包装到0x00000000)。如果您的时间超过20天,则需要更多位。