4

对于一个游戏,我想测量自上一帧以来经过的时间。

我曾经glutGet(GLUT_ELAPSED_TIME)这样做过。但是在包含 glew 之后,编译器再也找不到 glutGet 函数(奇怪)。所以我需要一个替代方案。

到目前为止,我发现的大多数网站都建议在 ctime 中使用时钟,但该功能仅测量程序的 cpu 时间,而不是实时时间!ctime 中的时间函数只能精确到秒。我至少需要毫秒精度。

我可以使用 C++11。

4

2 回答 2

5

我认为在 C++11 之前没有内置 C++ 的高分辨率时钟。如果您无法使用 C++11,则必须使用 glut 和 glew 修复错误或使用平台相关的计时器功能。

#include <chrono>
class Timer {
public:
    Timer() {
        reset();
    }
    void reset() {
        m_timestamp = std::chrono::high_resolution_clock::now();
    }
    float diff() {
        std::chrono::duration<float> fs = std::chrono::high_resolution_clock::now() - m_timestamp;
        return fs.count();
    }
private:
    std::chrono::high_resolution_clock::time_point m_timestamp;
};
于 2013-07-15T23:09:03.973 回答
2
  1. Boost 提供 std::chrono 类时钟:boost::chrono
  2. 您应该考虑使用 std::chrono::steady_clock (或 boost 等效项)而不是 std::chrono::high_resolution_clock - 或至少确保 std::chrono::steady_clock::is_steady() == true - 如果你愿意用它来计算持续时间,因为非稳定时钟返回的时间甚至可能随着物理时间的推移而减少。
于 2013-07-15T23:21:50.547 回答