gpt4 book ai didi

c++ - Boost timed_wait闰秒问题

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

我正在使用来自 boost C++ 库的 timed_wait,我遇到了闰秒问题。

这是一个快速测试:

#include <boost/thread.hpp>
#include <stdio.h>
#include <boost/date_time/posix_time/posix_time.hpp>

int main(){
// Determine the absolute time for this timer.
boost::system_time tAbsoluteTime = boost::get_system_time() + boost::posix_time::milliseconds(35000);

bool done;
boost::mutex m;
boost::condition_variable cond;

boost::unique_lock<boost::mutex> lk(m);
while(!done)
{
if(!cond.timed_wait(lk,tAbsoluteTime))
{
done = true;
std::cout << "timed out";
}
}
return 1;
}

timed_wait 函数比预期提前 24 秒返回。 24 秒是 UTC 中的当前闰秒数。

因此,boost 被广泛使用,但我找不到有关此特定问题的任何信息。还有其他人遇到过这个问题吗?可能的原因和解决方法是什么?

注意:我在 linux 系统上使用 boost 1.38。我听说这个问题不会发生在 MacOS 上。

更新:更多信息:这发生在 2 台内核为 2.6.9 的 redhat 机器上。我在内核为 2.6.30 的 ubuntu 机器上执行了相同的代码,计时器的行为符合预期。

所以,我认为这可能是由操作系统或 redhat 机器上的一些错误设置引起的。

我编写了一个解决方法,将时间调整为 UTC,然后从该调整中获取差异并添加到原始时间。这对我来说是个坏主意,因为如果这段代码在没有这个问题的机器上执行,它可能会提前 24 秒。仍然找不到原因。

最佳答案

在 Linux 系统上,系统时钟将遵循 POSIX 标准,该标准规定没有观察到闰秒!如果您不这么认为,那可能就是您所看到的差异的来源。 This document对于 UTC 如何与其他时间尺度相关,以及如果依赖操作系统的计时概念可能遇到的问题,有很好的解释。

关于c++ - Boost timed_wait闰秒问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784639/

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