我正在尝试模拟使用C ++实际花费时间的真实场景;我正在使用for循环将时间分解为五分钟的增量。
我想知道是否有任何方法告诉程序每秒只执行for循环的一步?这样程序就会变得“可观察”。
答案 0 :(得分:6)
获取当前时间并添加频率,执行你的动作并等到计算出的时间。像这样。
#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
更好
答案 1 :(得分:0)
有了睡眠,您可以让程序等待。我不知道这是不是你想要的。所以要等一秒钟,你输入:
睡眠(1000)
答案 2 :(得分:0)
它以一致的速度运行有多重要? sleep()
是实现此目的的一种可能方法,但sleep
在提供准确的时间片方面相当差。当然,游戏需要一直这样做,因此游戏程序员已经探索了各种各样的方法,你可以找到关于如何实现游戏循环的讨论here。中心理论是定期检查计时器并根据产生所需的每秒帧数进行更新。