c - 如何在 C 中以特定速率运行循环(在仿真中)
问题描述
我现在正在编写一个模拟器作为一个副项目,我想以适当的速度模拟我选择的机器作为原始硬件。我的系统应该更强大,以至于执行单条指令的时间可以忽略不计,所以如果我只有一个函数,比如tick
执行单条指令,它会运行得太快。
我想知道在 C 中是否有任何方法可以在某个给定的间隔(以 MHz 为单位)调用函数。就上下文而言,我是在 Mac 上写的,所以任何 POSIX 或 OS X SDK 中的东西都可以工作(我查看了 libdispatch 但什么都看不到)。
最好简单地运行一个循环并计算自上次循环以来的时间增量?这似乎相当低效(抢占也可能成为这里的一个因素)。这样做的其他方法是什么?谢谢。
解决方案
使用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 微秒。除了您自己在同一进程中的代码之外,调用您的函数的其他一些事情可能会花费“太长时间”。
推荐阅读
- python - LSTM 价格预测图 - ValueError:x 和 y 的大小必须相同
- python - 使用 CustomJS 为行字形更新 CDSView 过滤器
- git - Terraform 用于存储获取变量的单一来源
- eclipse - 使用 Eclipse 在 SAP HANA Neo 中执行 XSJS 程序
- c - C 树根不能被遍历两次
- r - 在 data.table 中按组删除特定时间内相同的连续值
- python - 如何通过使用来自另一个数组的 pop 方法填充一个空数组的元素来“替换”一个数组?
- uicollectionview - UICollectionViewCell 不适合屏幕
- node.js - 如何为从 express-validator 返回的错误添加额外的属性
- c# - 在 C# 中具有层次路径识别的嵌套对象的 Null Guard