我试图制作我的Timer类时遇到问题,
出于某种原因,当我没有将它嵌套在一个类中时它似乎有效,但是当我试图将它添加到一个类时它就停止了工作。
在std :: thread中调用它。
endTime和startTime都= 1.52426291e + 09 elapsedTime始终为0
class Timer
{
public:
Timer::Timer()
{
}
Timer::~Timer()
{
}
void Timer::init()
{
m_StartTime = std::chrono::system_clock::now().time_since_epoch();
}
void Timer::update()
{
m_EndTime = std::chrono::system_clock::now().time_since_epoch();
elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(m_EndTime - m_StartTime).count();
m_StartTime = m_EndTime;
}
float Timer::getElapsedTimeInSec()
{
return this->elapsedTime;
}
private:
float elapsedTime;
std::chrono::duration<float> m_StartTime;
std::chrono::duration<float> m_EndTime;
};
答案 0 :(得分:1)
将m_StartTime和m_EndTime声明为时间点(不是持续时间)。在elapseTime计算期间,您错过了转换毫秒到秒的时间。这是一个实现的片段。
class Timer
{
public:
Timer::Timer()
{
}
Timer::~Timer()
{
}
void Timer::init()
{
m_StartTime = std::chrono::system_clock::now();
}
void Timer::update()
{
m_EndTime = std::chrono::system_clock::now();
elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(m_EndTime - m_StartTime).count()/1000;
m_StartTime = m_EndTime;
}
float Timer::getElapsedTimeInSec()
{
return this->elapsedTime;
}
private:
float elapsedTime;
std::chrono::system_clock::time_point m_StartTime;
std::chrono::system_clock::time_point m_EndTime;
};
int main()
{
Timer timer;
timer.init();
std::this_thread::sleep_for(std::chrono::seconds(2));
timer.update();
std::cout << timer.getElapsedTimeInSec() << " sec\n";
return 0;
}
输出: