2

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

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

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

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

4

4 回答 4

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

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

祝你好运!

于 2010-04-06T13:56:33.053 回答
2

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

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

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

您也许应该首先查看您的需求,但很少需要超过 6 或 7 个有效数字......而且我担心您正在尝试获得一个适合所有持续时间的对象。

也许您应该对持续时间进行分类:

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

因为……在 2 个月的范围内,1/10 秒是什么意思?

于 2010-04-06T14:39:44.577 回答
0

明显的。使用 64 位整数和特定于平台的代码来获取毫秒数。在包括 OSX 在内的 Unix 上,您需要gettimeofday. 在 Windows 上,祝你好运获得可靠的毫秒粒度时间源;Tcl 库中执行此操作的代码非常复杂,因为该区域存在一些邪恶的陷阱。

于 2010-04-06T14:00:14.597 回答
0

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

于 2010-04-06T14:02:08.613 回答