gpt4 book ai didi

c++ - 较长的 sleep (在 C++ 中)不如短的精确

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:00 25 4
gpt4 key购买 nike

我的任务是每“轮”分钟(在 xx:xx:00)做一些事情我用类似的东西

const int statisticsInterval=60;
time_t t=0;
while (1)
{
if (abs(t-time(NULL)==0)) //to avoid multiple calls in the same second that is the multiple of 60
boost::this_thread::sleep(boost::posix_time::seconds(2));//2, not 1 to make sure that 1 second passes

t=time(NULL);
boost::this_thread::sleep(boost::posix_time::seconds(statisticsInterval-(t%statisticsInterval)));

//DO WORK
}

如您所见,我使用了 sleep (60 秒 - 当前分钟内经过的秒数)。但是一位程序员告诉我它不精确,我应该将其更改为while 循环里面有 sleep(1)。我认为他是对的非常值得怀疑,但我只是想检查是否有人知道如果 sleep 间隔很长,精度是否会降低。我假设 sleep 的实现方式是在未来的某个时间激活触发器并将线程放入“准备执行线程组”,所以我认为没有理由在精度上存在差异。顺便说一句,操作系统是 ubuntu,我不关心少于 2-3 秒的错误。例如,如果我睡了 52 秒,53.8 秒的 sleep 是完全可以接受的。附言我知道 sleep 定义了最短时间,理论上我的线程可能会在 2047 年被激活。但我问的是现实场景。

最佳答案

当你执行 sleep(N) 时,它会告诉操作系统在当前时间 + N 触发线程。

它并不总是准确的原因是您不是系统中的唯一线程。
可能有另一个线程要求在您之前被唤醒,并且可能只有一些重要的操作系统内容需要恰好在那个时间执行。

反正应该不会有什么精度问题,因为这个方法跟N没关系。

它不会“精确”的唯一原因是它是一个无法正确计算时间的蹩脚操作系统。再一次,循环不会解决这个问题。

关于c++ - 较长的 sleep (在 C++ 中)不如短的精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57994715/

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