我正在尝试使用 C++ 模拟一个需要实际时间的现实生活场景;我正在使用 for 循环将时间分成五分钟的增量。
我想知道是否有任何方法可以告诉程序每秒只执行for循环的一个步骤?这样节目将变得“可观看”。
获取当前时间并添加频率,执行您的动作并等待计算的时间。像这样。
#include <thread>
#include <chrono>
//...
while(whatever_condition()) {
auto next=std::chrono::system_clock::now()
+std::chrono::seconds(1);
do_whatever();
std::this_thread::sleep_until(next);
}
http://en.cppreference.com/w/cpp/thread/sleep_until
注意使用普通的“sleep”和“usleep”函数是非标准的,并且不会考虑操作所花费的时间。
编辑:这是一个 c++11 解决方案,但是如果没有 C++11 boost 也为 C++98 和 03 提供此功能。我相信这仍然比使用更可取sleep
使用睡眠,您可以让程序等待。我不知道这是不是你想要的。因此,要等待一秒钟,请键入:
睡眠(1000)
它以一致的速度运行有多重要?sleep()
是一种可能的方法,但sleep
在提供准确的时间片方面很差。当然,游戏需要一直这样做,所以游戏程序员已经探索了各种各样的方法来做到这一点,你可以在这里找到关于如何实现游戏循环的讨论。中心理论是定期检查计时器并根据每秒产生所需的帧数进行更新。