C ++中的时间推移代码

时间:2018-02-19 19:11:49

标签: c++ time thread-safety timelapse

我必须创建游戏中时光倒流功能,以便在循环中等待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));
    }


}
}

谢谢,

1 个答案:

答案 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);
    }
}