-1

我必须创建延时功能来等待循环中的 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));
    }


}
}

谢谢,

4

1 回答 1

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);
    }
}
于 2018-02-19T20:42:54.170 回答