0

我正在尝试使用 C++ 模拟一个需要实际时间的现实生活场景;我正在使用 for 循环将时间分成五分钟的增量。

我想知道是否有任何方法可以告诉程序每秒只执行for循环的一个步骤?这样节目将变得“可观看”。

4

3 回答 3

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

于 2013-02-27T15:55:39.993 回答
0

使用睡眠,您可以让程序等待。我不知道这是不是你想要的。因此,要等待一秒钟,请键入:

睡眠(1000)

于 2013-02-27T15:55:12.753 回答
0

它以一致的速度运行有多重要?sleep()是一种可能的方法,但sleep在提供准确的时间片方面很差。当然,游戏需要一直这样做,所以游戏程序员已经探索了各种各样的方法来做到这一点,你可以在这里找到关于如何实现游戏循环的讨论。中心理论是定期检查计时器并根据每秒产生所需的帧数进行更新。

于 2013-02-27T15:58:25.100 回答