C ++高频循环/线程定时

时间:2013-04-04 10:19:37

标签: c++

对于一些上下文,我正在编写一个简单的CPU模拟器。模拟器过程归结为调用“步骤”函数来读取和执行程序中的下一个操作。目前,这只是在while循环中尽快完成。

我希望代码是跨平台的,但(不幸的是)windows是主要目标。

我需要能够在1000Hz到100,000Hz范围内的常规间隔执行我的Emulator->step()功能。

  • 对于较慢的循环,我只使用sleep()但是(至少在窗口上)它没有这么高频率的分辨率。

  • 我还玩弄旋转循环检查Boost微秒计时器。忽略这种方法的不准确性,它会占用实际的CPU时间,而它意味着“空闲”。我在线程中同时运行多个模拟CPU,因此while循环会对性能产生显着影响。

当然有一种方法可以做我想用C ++做的事情吗?

3 个答案:

答案 0 :(得分:1)

您不需要任何特殊的睡眠分辨率。在每个循环结束时,只需计算您是否需要睡眠。如果没有,请运行下一个循环。如果是这样,请睡觉计算的金额。如果你在一个循环上多睡一点就没关系,因为这个逻辑会让你在下一个循环中少睡一些。

答案 1 :(得分:0)

您无法在Windows下精确睡眠(可能是Windows性能计数器功能帮助,请参阅Is there a Windows equivalent of nanosleep?)。

你说你在线程中同时运行了许多模拟CPU,所以一种可能的解决办法就是抛弃线程并自己为不同的CPU执行调度(循环)。

答案 2 :(得分:0)

如果您使用的是C ++ 11编译器,请查看<chrono>。在那里你可以找到高精度计时器。但请注意,在Windows环境中,这些仍然具有较低的准确性,微软有望在下一版本中修复。