- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 POSIX 计时器,每次凌晨 3 点左右都会触发。
明显的实现是将 timer_create
与 CLOCK_REALTIME
结合使用,并将超时设置为凌晨 3 点,根据当前时间,可以是今天或明天。
这适用于所有情况,除非系统时间向后修正。如果用户将时钟设置为 future 一年,然后回到正确的日期,则新的计时器值将设置为一年内的明天,因此计时器不会经过一整年。
作为一种解决方法,我可以确定每个重复计时器应在何时发生上一次超时,并且如果我在此之前看到系统时间,我会更正所有现有计时器,但这仍然需要单独的唤醒原因。
如果系统时钟向后设置(通常或在给定时间之前),是否有办法收到通知,或者是否有更好的方法来处理此问题?
最佳答案
首先,我认为你想得太多了 - 现在是 2017 年,系统时钟除了在启动时不需要设置(而不仅仅是漂移校正),而且时钟的误差永远不应该超过几个毫秒(最好是微秒),全部通过 ntp、ptp 或类似工具保持正确的形状。在我的书中,简单地记录您的软件在不连续的时钟调整下不会按预期运行是完全可以接受的。
如果您不能接受,您的选择就受到限制:
您可以使用 CLOCK_MONOTONIC
代替 CLOCK_REALTIME
,并使用凌晨 3 点与当前时间之间的差值设置计时器,而不使用 TIMER_ABSTIME
由 CLOCK_REALTIME
报告的时间作为间隔。这样做的好处是,即使任意重置时钟,您也不会错过凌晨 3 点的事件超过 24 小时,但如果调整一天中的时间,您仍然可能会错过它。
使用到期时间较短的计时器,并轮询每个计时器,即使您刚刚跨过凌晨 3 点边界。这永远不会错过超过计时器间隔的事件,但会浪费大量的 CPU 资源(并阻止深度 sleep )轮询。
这些方法还有其他变体,但就优缺点而言,它们基本上是相同的。
关于c - 根据 settimeofday 调整基于 CLOCK_REALTIME 的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46996157/
我在这里做错了什么?我希望 settimeofday() 更改系统时间,而不是返回 EINVAL。 $ uname -a Linux io 4.3.5-300.fc23.x86_64 #1 SMP M
是否可以在 C 中传递 settimeofday() 我的 time_t/epoch 时间值?谁能举个例子说明我该怎么做……我的 C 技能有点生疏了:S 会不会是: time_t time = som
我有一个辅助函数可以执行一些非常昂贵的操作。 我正在尝试分析算法的主要部分,但这个辅助函数在其中被调用了很多次。因此,测量的时间考虑了辅助功能的时间。 为了解决这个问题,我决定设置和恢复时间,使辅助功
我有一个 POSIX 计时器,每次凌晨 3 点左右都会触发。 明显的实现是将 timer_create 与 CLOCK_REALTIME 结合使用,并将超时设置为凌晨 3 点,根据当前时间,可以是今天
我正在尝试在 C 语言的 NDK native 代码中设置设备时间。据我所知,最好的解决方案是使用 settimeofday()。 struct timeval tv = {timet, 0}; st
我正在使用此代码在我的 ubuntu 系统中运行 ntp 客户端。 /* This code will query a ntp server for the local time and displa
我是一名优秀的程序员,十分优秀!