计时器类似乎不起作用

时间:2018-04-20 22:14:39

标签: c++ std

我试图制作我的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;

};

1 个答案:

答案 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;
}

输出:

enter image description here