因此,我试图在while循环中每10‘m运行一次代码块,而不停止循环(睡眠)。
我希望取得这样的成就:
while (true) {
if (should_run_the_10ms_code) {
// some code (once every 10 ms)
}
// some other code (every tick)
}发布于 2022-11-20 15:54:33
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)
}注意,如果在timer_diff_ms调用之间发生了一些轻微的事情(可能在“其他代码”部分,可能与您的程序完全无关),那么now()可能要比10大得多。
如果您不需要std::chrono::milliseconds (它将是一些整数类型),也可以使用double而不是std::chrono::duration<double, std::milli>。
https://stackoverflow.com/questions/74509450
复制相似问题