我将开发一个C / C ++的小型专用服务器,需要永久的正常运行时间。我一直在研究一些时间函数,因为计算需要毫秒计时。我遇到了两个问题:
使用32位整数来存储自操作开始以来的毫秒数将在大约49天标记处重置为零。我已经考虑过使用64位整数,使用gettimeofday来检索微秒,但这将我带到第二部分。
似乎没有任何标准系统调用来获取与平台无关的经过的毫秒数
我该怎么做才能解决这两个问题?
答案 0 :(得分:6)
使用64位整数,假设给你足够的时间
你是对的;没有标准。一种可能性是使用Boost DateTime库,交替找到另一个或自己动手。
祝你好运!
答案 1 :(得分:2)
正如已经说过的那样,你要面对的第一个问题是获得一个可靠的毫秒精确时间。
我承认我对这个问题有点分阶段。
我可以理解精确定时的需要(毫秒级,甚至是微秒级)但是在毫秒级别定时50天似乎......很奇怪。
您或许应首先检查您的需求,但很少需要超过6或7位有效数字...而且我担心您正试图让所有持续时间对象都适合它们。
也许您应该将持续时间分类:
因为......在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天,则需要更多位。