当前位置: 首页 > 面试题库 >

Linux clock_gettime(CLOCK_MONOTONIC)奇怪的非单调行为

顾嘉良
2023-03-14
问题内容

伙计们,在我的应用程序clock_gettime(CLOCK_MONOTONIC)中,为了测量帧之间的增量时间(gamedev中的一种典型方法),我不时遇到一种奇怪的行为clock_gettime(..)-返回值有时不是单调的(即上次时间)
是更大的 比目前的时间)。

当前,如果发生这样的悖论,我只是跳过当前帧并开始处理下一个帧。

问题是,这怎么可能呢?这是Linux POSIX实现中的错误clock_gettime吗?我正在使用Ubuntu Server Edition
10.04(内核2.6.32-24,x86_64),gcc-4.4.3。


问题答案:

man clock_gettime 说:

CLOCK_MONOTONIC_RAW (从Linux 2.6.28开始;特定于Linux)

与CLOCK_MONOTONIC相似,但是可以访问不受NTP调整的基于硬件的原始时间。

由于CLOCK_MONOTONIC_RAW不是NTP调整的主题,我想CLOCK_MONOTONIC可能是。

我们对带有2.6.18内核和某些特定Itanium处理器的Redhat Enterprise
5.0遇到了类似的问题。我们无法在同一OS上与其他处理器一起复制它。它已在RHEL 5.3中用较新的内核和一些Redhat补丁修复。



 类似资料:
  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 我想学习一些单例类并实现。我引用了这篇文章https://stackoverflow.com/a/12649574/6323093 . 我的实现是这样的。所有源文件都是相同的目录。 Singleton.dart user1.dart 用户2。飞奔 主要的飞奔 在上面的代码中,我预计和都是,但实际结果是和。 当我改变的导入语句到或的导入语句到时,结果是(如我所料)。 这是Dart的行为吗?或者这种行

  • 问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么

  • 问题内容: 我正在为一个问题而苦苦挣扎,我不明白为什么它不起作用。如何通过将变量传递并转换为? 为什么在顶部代码段中不起作用,但在行下方的底部代码段中起作用? 唯一的区别似乎是添加了一个额外的变量,该变量也被键入为? 问题答案: 该是一种原始类型,同时是一个普通的Java类。您不能在原始类型上调用方法。但是该方法在上可用,如javadoc中所示 有关这些原始类型的更多信息,请参见此处

  • 问题内容: 为什么的到哪里去了? 问题答案: 删除任何字符,并从字符串的开头和结尾。

  • 问题内容: 我认为这是一个正常程序,但这是我得到的输出: 有人可以向我解释一下吗? 问题答案: 这是有据可查的PHP行为,请参阅php.net的foreach页面上的警告。 警告 即使在 foreach 循环之后,仍保留 $ value的 引用和最后一个数组元素。建议通过unset()销毁它。 __ 编辑 尝试逐步了解此处实际发生的情况