跨平台毫秒计时器持续49天以上?
问题描述:
我将在C/C++中开发一个小型专用服务器,这将需要永久运行。我一直在研究一些时间函数,因为计算需要毫秒计时。我有2个问题,我面对:跨平台毫秒计时器持续49天以上?
使用32位整数存储的毫秒数自投产开始将在环绕约49天痕重置为零。我曾考虑过使用64位整数,使用gettimeofday来检索微秒,但这将我带到第二部分。
似乎 有不被任何标准的系统调用用于获取经过毫秒的平台独立的
我应该怎么做,以解决这两个问题?
答
明显。使用具有平台特定代码的64位整数来获取毫秒数。在包括OSX的Unix上,您需要gettimeofday
。在Windows上,获得可靠的毫秒级粒度时间源的好运气;由于该地区存在一些邪恶陷阱,因此code in the Tcl library to do this确实很复杂。
答
答案1:如果“毫秒计时”你是测量是在20天左右,就可以减去时间无符号数,检查结果作为符号值。这应该给包装定时器的正确结果(从0xffffffff包装到0x00000000)。如果你的时间超过20天,你需要更多的位。
答
正如前面已经说过,你要面对的第一个问题是要获得可靠的毫秒精确的时间。
我承认我有点被这个问题分阶段虽然。
我可以理解为精确定时(毫秒级,甚至微秒),但在毫秒级定时50天似乎......奇怪的需要。
你或许应该先回顾一下你的需求,但它很少需要超过6个或7显著数字......我怕你正在试图获得一个尺寸适合所有这些持续时间对象。
也许你应该改为分类你的持续时间:
- 最多几分钟>使用精确到毫秒
- 否则>使用精确到秒(自1970年1月1日著名的计数)
因为......在2个月的规模上,1/10秒的感觉是什么?
请原谅我,如果这是说明一个非常明显的,但1)使用更多的位2)编写一个系统依赖模块,使任何时间的原始你最好的。 – msw 2010-04-06 13:55:10
“需要永久运行” - 即使重新启动也不允许?怎么样在服务器上漏水或断电? LOST的舱口会炸毁,世界结束了吗? – 2010-04-06 14:44:49
@Coronatus:更多的上下文:“一个C/C++服务器,将需要永远的正常运行时间”。假如硬件没有重新启动/故障/陨石影响,硬件会变得任意长,那么这个软件还需要开发吗?否则,你基本上说“这个软件必须每X天重新启动一次”,这显然是一个不好的计划。 – Cascabel 2010-04-06 15:11:41