我正在尝试实现一个用于调试的秒表,如下所示:
#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,而是一个负整数。
怎么了?
最佳答案
m_time
未初始化,因此其值不确定 - 它只是一些垃圾值。您可能希望将其初始化为 0 - 使用 std::chrono::nanoseconds::zero()
。 Here它在行动。
关于C++ 标准计时溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517676/