Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计时器类似乎不起作用_C++_Std - Fatal编程技术网

C++ 计时器类似乎不起作用

C++ 计时器类似乎不起作用,c++,std,C++,Std,我的计时器类有问题,我想 由于某种原因,当我没有将它嵌套在类中时,它似乎可以工作,但当我尝试将它添加到类中时,它就停止了工作 它在std::线程内调用 endTime和startTime均=1.52426291e+09 elapsedTime始终为0 class Timer { public: Timer::Timer() { } Timer::~Timer() { } void Timer::init() {

我的计时器类有问题,我想

由于某种原因,当我没有将它嵌套在类中时,它似乎可以工作,但当我尝试将它添加到类中时,它就停止了工作

它在std::线程内调用

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;

};
类计时器
{
公众:
计时器::计时器()
{
}
计时器::~Timer()
{
}
void Timer::init()
{
m_StartTime=std::chrono::system_clock::now().时间(从新纪元开始);
}
无效计时器::更新()
{
m_EndTime=std::chrono::system_clock::now().time_since_epoch();
elapsedTime=std::chrono::duration_cast(m_EndTime-m_StartTime).count();
m_开始时间=m_结束时间;
}
浮点计时器::getElapsedTimeInSec()
{
返回此->elapsedTime;
}
私人:
浮动时间;
std::chrono::持续时间m_开始时间;
std::chrono::duration m_EndTime;
};

将m_StartTime和m_EndTime声明为时间点(而不是持续时间)。您在计算ElapTime时错过了从毫秒到秒的转换。下面是一个实现片段

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;
}
类计时器
{
公众:
计时器::计时器()
{
}
计时器::~Timer()
{
}
void Timer::init()
{
m_StartTime=std::chrono::system_clock::now();
}
无效计时器::更新()
{
m_EndTime=std::chrono::system_clock::now();
elapsedTime=std::chrono::duration\u cast(m_EndTime-m_StartTime).count()/1000;
m_开始时间=m_结束时间;
}
浮点计时器::getElapsedTimeInSec()
{
返回此->elapsedTime;
}
私人:
浮动时间;
标准::时钟::系统时钟::时间点m_开始时间;
标准::时钟::系统时钟::时间点m_结束时间;
};
int main()
{
定时器;
timer.init();
std::this_thread::sleep_for(std::chrono::seconds(2));
timer.update();

std::cout删除所有
计时器::
。它们只在类外的成员函数定义上需要。此外,您可以安全地删除空的ctor和dtor。此外,下次请包含准确的错误消息。@HolyBlackCat
计时器::
仅在那里,因为我从我的cpp文件复制了它,将其放入一个文件。@wihutamiz Post a.类本身不起任何作用。使用该类的代码提供了适当的上下文。现在,默认情况下,构建计时器类会使所有这些成员都未初始化。