我写了一个类,它每秒钟执行一些操作。 这是:
using namespace std::chrono;
class TimerTest
{
public:
TimerTest()
{
m_start = steady_clock::now();
}
void update() // is called every iteration of the main loop
{
if (duration_cast<seconds>(steady_clock::now() - m_start) >= m_duration)
{
m_start = steady_clock::now();
std::cout << 1; // some action
}
}
private:
time_point<steady_clock> m_start;
duration<double> m_duration = seconds(1);
};
当它由一个单独的变量定义时,它可以正常工作:
int main()
{
TimerTest timer_test;
while (true)
{
timer_test.update();
}
}
每秒“%1”都会打印到控制台。 但是问题出现了,当我把我的类放到一个向量中时:
int main()
{
std::vector<TimerTest> vec;
vec.push_back(TimerTest());
while (true)
{
for (auto i : vec)
{
i.update();
}
}
}
在向量中,此如果(duration_cast
行工作错误,并且自上次m_start
更新以来所经过的时间总是大于M_duration
。 因此,每次循环迭代都将“1”打印到控制台。 我真的很想知道这种奇怪行为的原因以及如何解决它。 可能我对向量有些不了解,因为我对C++不是很有经验。 所以,请帮我理解一下。
基本问题是,基于for循环的范围是创建TimerTest
的副本,并更新该副本而不是原始副本。 试试。。。
for (auto &i: vec) {
i.update();
}