在while循环中每隔10ms调用一个代码块,而不停止循环



所以我试图在while循环中每隔10ms运行一次代码块,而不停止循环(睡眠)。

我想实现这样的事情:

while (true) {
if (should_run_the_10ms_code) {
// some code (once every 10 ms)
}
// some other code (every tick)
}

std::chrono::steady_clock::now给出来自单调时钟的当前时间。下面是使用它的一种相对简单的方法:

auto timer = std::chrono::steady_clock::now();
while (true) {
auto now = std::chrono::steady_clock::now();
std::chrono::duration<double, std::milli> timer_diff_ms = timer - now;
if (timer_diff_ms >= 10.0) {
// some code (once every 10 ms)
timer = now;
// or
// timer = std::chrono::steady_clock::now();
// if the "some code" takes a bit of time
}
// some other code (every tick)
}

注意,如果在now()调用之间发生了一些长度的事情(可能在"其他代码"中),timer_diff_ms可能远远大于10。部分,可能与您的程序完全无关)。

你也可以用std::chrono::milliseconds代替std::chrono::duration<double, std::milli>,如果你不需要double(它将是一些整数类型)。

最新更新