【问题标题】:how to make an application resilient to clock_settime如何使应用程序对 clock_settime 有弹性
【发布时间】:2011-07-25 06:41:15
【问题描述】:

应用程序(在 linux 2.6.31 上运行)使用 usleep 调用进行调速。但是,它看起来对日期更改没有弹性(在 shell 中使用 date 或在另一个进程中使用 clock_settime)。 避免应用程序被锁定的正确做法是什么?

编辑1

假设应用程序希望每 100 毫秒执行一次操作。工作完成后调用gettimeofday,推算剩余的休眠毫秒数,直到下一个100ms切片,然后调用usleep。

【问题讨论】:

  • usleep() 通常是如何调用的,即应用程序唤醒和运行的频率是多少?尝试更多地解释问题是什么,更改时钟时出了什么问题?
  • @unwind。好吧,我编辑了这个问题。希望它更清楚。

标签: c date time posix usleep


【解决方案1】:

如果您必须确定时间间隔,而不是当前日期/时间,则必须使用此调用:

struct timespec tim;
uint64_t 微秒;

clock_gettime(CLOCK_MONOTONIC, &tim);
微秒= 1000000ULL * tim.tv_sec + tim.tv_nsec / 1000;

这是您的系统正常运行时间,真正完整的“硬件”时间(无法修改)。

关于您的定期例程,您可以使用 alarm() 和 setitimer() 设置定期处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2016-01-11
    • 2017-10-30
    • 2023-04-04
    相关资源
    最近更新 更多