gpt4 book ai didi

c++ - 在 C++ 代码中设置 while 循环的执行速率以实现实时同步

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:53 27 4
gpt4 key购买 nike

我正在使用 .cpp 源代码进行实时模拟。我必须每 0.2 秒(200 毫秒)取一个样本......有一个 while 循环,每个时间步都取一个样本......我想同步这个 while 循环的执行以获得每 (200 毫秒) 一个样本...我应该如何修改 while 循环?

while (1){
// get a sample every 200 ms
}

最佳答案

简单而准确的解决方案 std::this_thread::sleep_until :

#include "date.h"
#include <chrono>
#include <iostream>
#include <thread>

int
main()
{
using namespace std::chrono;
using namespace date;
auto next = steady_clock::now();
auto prev = next - 200ms;
while (true)
{
// do stuff
auto now = steady_clock::now();
std::cout << round<milliseconds>(now - prev) << '\n';
prev = now;

// delay until time to iterate again
next += 200ms;
std::this_thread::sleep_until(next);
}
}

"date.h" 延迟部分不需要。它在那里提供 round<duration>函数(现在在 C++17 中),并使其更容易打印出 duration秒。这一切都在“做事”下,与循环延迟无关。

只要得到一个chrono::time_point ,加上你的延迟,然后睡到time_point .只要你的“东西”花费的时间比你的延迟少,你的循环平均会保持你的延迟。不需要其他线程。不需要计时器。就<chrono>sleep_until .

这个例子只是为我输出:

200ms
205ms
200ms
195ms
205ms
198ms
202ms
199ms
196ms
203ms
...

关于c++ - 在 C++ 代码中设置 while 循环的执行速率以实现实时同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com