c ++ std chrono溢出

时间:2017-10-01 22:57:40

标签: c++ overflow chrono

我正在尝试使用秒表进行调试,如下所示:

#include <chrono>

namespace sbstd
{
    class timer
    {
    private:
        bool m_running = false;
        std::chrono::time_point<std::chrono::system_clock> m_temp;
        std::chrono::nanoseconds m_time;
    public:
        void start()
        {
            if (m_running) { throw std::exception("timer already running"); }
            m_temp = std::chrono::system_clock::now();
            m_running = true;
        }

        void stop()
        {
            if (!m_running) { throw std::exception("timer not started"); }
            m_time += std::chrono::system_clock::now() - m_temp;
            m_running = false;
        }

        long long get_ms() const
        {
            return std::chrono::duration_cast<std::chrono::milliseconds>(m_time).count();
        }
    };
}

在主要方法中,我有以下内容:

sbstd::timer t1;
t1.start();
std::this_thread::sleep_for(std::chrono::seconds(5));
t1.stop();
cout << t1.get_ms();

而不是5000我得到一个负数。

有什么问题?

1 个答案:

答案 0 :(得分:1)

m_time未初始化,因此其值不确定 - 它只是一些垃圾值。您可能希望将其初始化为0 - 使用std::chrono::nanoseconds::zero()Here它正在发挥作用。