c ++获取平台独立的经过时间

时间:2013-07-15 22:59:19

标签: c++ cross-platform

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

我使用glutGet(GLUT_ELAPSED_TIME)来做到这一点。但是在包含glew后,编译器再也找不到glutGet函数了(奇怪)。所以我需要另一种选择。

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

我可以使用C ++ 11。

2 个答案:

答案 0 :(得分:4)

我不认为在C ++ 11之前有一个内置C ++的高分辨率时钟。如果您无法使用C ++ 11,则必须使用glut and 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;
};

答案 1 :(得分: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 - 如果你想用它来计算持续时间,因为非稳定时钟返回的时间甚至会随着物理时间的推移而减少。