C++ c++;获取独立于平台的运行时间
对于一个游戏,我想测量从最后一帧开始经过的时间 我使用了C++ c++;获取独立于平台的运行时间,c++,cross-platform,C++,Cross Platform,对于一个游戏,我想测量从最后一帧开始经过的时间 我使用了glutGet(GLUT\u exposed\u TIME)来实现这一点。但是在包含了glew之后,编译器再也找不到glutGet函数了(奇怪)。所以我需要一个替代方案 到目前为止,我发现的大多数网站都建议在ctime中使用时钟,但该功能只测量程序的cpu时间,而不是实时时间!ctime中的时间函数仅精确到秒。我需要至少毫秒的准确度 我可以使用C++ 11。< /P> < P>我不认为C++ 11之前有一个高分辨率时钟内置C++。如果无法使
glutGet(GLUT\u exposed\u TIME)
来实现这一点。但是在包含了glew之后,编译器再也找不到glutGet函数了(奇怪)。所以我需要一个替代方案
到目前为止,我发现的大多数网站都建议在ctime中使用时钟,但该功能只测量程序的cpu时间,而不是实时时间!ctime中的时间函数仅精确到秒。我需要至少毫秒的准确度
<>我可以使用C++ 11。< /P> < P>我不认为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;
};
#包括
班级计时器{
公众:
计时器(){
重置();
}
无效重置(){
m_timestamp=std::chrono::high_resolution_clock::now();
}
浮动差(){
std::chrono::duration fs=std::chrono::high_resolution_clock::now()-m_时间戳;
返回fs.count();
}
私人:
标准::时钟::高分辨率时钟::时间点m_时间戳;
};
注意:您应该能够同时使用glew和glut,这里有一个注意事项。只需确保在glut之前包含glew。可能重复@Boris我确保在glut之前包含glew。某些平台(Win32)将需要编写自己的时钟类,因为库类已损坏(分辨率非常低)。但是坚持使用C++11接口至少可以最小化不可移植的代码。而且@BenVoigt我从来没有在QueryPerformanceFrequency/QueryPerformanceCounter上遇到过任何问题。特别是对于一场比赛,应该没有问题。非常有趣的错误和更有趣的“修复”虽然
QueryPerformanceCounter
是未中断的时钟(但也是不可移植的)。Visual C++的高分辨率时钟
使用的系统刻度约为15毫秒,这是坏的。有关更多信息和错误报告,请参阅链接的答案。您确实不应该依赖高分辨率时钟,除非高分辨率时钟::对于持续时间计算是稳定的()。