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

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

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

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

有帮助吗?

解决方案

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

  2. 你是对的;没有标准。一种可能性是使用 增强日期时间 图书馆,交替寻找另一个或自己推出。

祝你好运!

其他提示

正如已经说过的,您将面临的第一个问题是获得可靠的毫秒级精确时间。

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

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

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

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

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

因为...1/10秒在2个月的尺度上意味着什么?

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top