首页 > 解决方案 > 如何在 C 中以特定速率运行循环(在仿真中)

问题描述

我现在正在编写一个模拟器作为一个副项目,我想以适当的速度模拟我选择的机器作为原始硬件。我的系统应该更强大,以至于执行单条指令的时间可以忽略不计,所以如果我只有一个函数,比如tick执行单条指令,它会运行得太快。

我想知道在 C 中是否有任何方法可以在某个给定的间隔(以 MHz 为单位)调用函数。就上下文而言,我是在 Mac 上写的,所以任何 POSIX 或 OS X SDK 中的东西都可以工作(我查看了 libdispatch 但什么都看不到)。

最好简单地运行一个循环并计算自上次循环以来的时间增量?这似乎相当低效(抢占也可能成为这里的一个因素)。这样做的其他方法是什么?谢谢。

标签: cmacosloopsemulationgrand-central-dispatch

解决方案


使用clock_gettime()andnanosleep()是要走的路。其他一些定期调用您的函数的机制肯定会比这慢。您甚至可以考虑循环和计数循环而不是使用nanosleep(). 考虑一些数字:

在 1 MHz 时,您的函数有 1 微秒的时间运行。在 10 MHz 时,您的函数有 100 纳秒的时间运行。

关于系统调用时间和上下文切换的一些实验数据:https ://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html

所以看起来系统调用超过 50 纳秒,上下文切换超过 1 微秒。除了您自己在同一进程中的代码之外,调用您的函数的其他一些事情可能会花费“太长时间”。


推荐阅读