【发布时间】:2013-06-07 22:10:16
【问题描述】:
我正在用 C 编写一个小型模拟,我希望某些事情每秒发生 N 次。
目前我有以下代码:
// Equal to 1 / N
struct timespec tick_period = (struct timespec){sec, nsec};
...
for(;;) {
tick();
nanosleep(&tick_period, NULL);
}
现在这段代码没有考虑运行tick方法所花费的时间,所以每秒的滴答数会逐渐倾斜一点。
我想完成两件事:
- 每秒运行
tickN 次,没有任何偏差。 - 如果运行
tick花费太多时间,计算机无法处理每秒运行 N 次,那么可以通过某种方式来调整滴答的频率。
是否有一种众所周知/公认的方式来完成这些事情?
【问题讨论】:
-
什么系统/环境?
-
Mac OS X 10.8 使用标准 C 和 UNIX 库。无需担心 Windows。
-
很遗憾,标准的 unix 方式(POSIX 计时器)在 Mac OS X 上不可用。
-
哦。这是最不幸的。它不是 UNIX 标准的一部分吗?
-
确实如此,但 Apple 似乎并不关心这一点。 ;-)