我必须创建游戏中时光倒流功能,以便在循环中等待X个时间。
以下代码检查 m_abortTimeLapseThread 的布尔值,但在运行一小时后,我注意到此代码的执行时间创建了10秒延迟。有没有办法尽可能频繁地检查 m_abortTimeLapseThread 并等待函数中的X时间没有观察到的那种延迟?
void Acquisition::TimeLapseCount() {
int max10msWaitTimes = m_timeLapseInMs / 10;
while (true) {
m_timeLapseImageSaved = true;
for (int i = 0; i < max10msWaitTimes; i++)
{
if (m_abortTimeLapseThread) {
return;
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
}
谢谢,
答案 0 :(得分:1)
您可以测量经过的总时间。
void Acquisition::TimeLapseCount() {
auto waitUntil = std::chrono::system_clock::now() + std::chrono::milliseconds(m_timeLapseInMs);
while (true) {
m_timeLapseImageSaved = true;
while (waitUntil > std::chrono::system_clock::now())
{
if (m_abortTimeLapseThread) {
return;
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
waitUntil += std::chrono::milliseconds(m_timeLapseInMs);
}
}