【发布时间】:2019-02-28 20:29:42
【问题描述】:
除了配置 NTP 服务器等之外,我不太确定 linux 中的计时是如何工作的。
我想知道是否有办法让我在 linux 中加快时间滴答。例如,我想在 1 秒内比正常速度快 10000 倍。
为了澄清,我不想让时间像重置时钟一样跳跃,我想提高滴答率。
【问题讨论】:
除了配置 NTP 服务器等之外,我不太确定 linux 中的计时是如何工作的。
我想知道是否有办法让我在 linux 中加快时间滴答。例如,我想在 1 秒内比正常速度快 10000 倍。
为了澄清,我不想让时间像重置时钟一样跳跃,我想提高滴答率。
【问题讨论】:
这通常是模拟和尽快重播传入数据或事件所需的功能。
人们解决这个问题的方式是他们有一个事件循环,例如libevent 或 boost::asio。当前时间从事件循环中获取(例如epoll返回的时间)并存储在事件循环变量当前时间中。不是使用gettimeofday 或clock_gettime,而是从那个当前时间 变量中读取时间。所有计时器都由事件循环当前时间驱动。
在模拟/重播时,事件循环当前时间被分配下一个事件的时间戳,因此消除了事件之间的持续时间并尽可能快地重播事件。并且您的计时器仍然可以在事件之间工作和触发,就像它们在实时中一样,但没有延迟。为了使您保存的事件流正常工作,您的回放必须包含每个事件的时间戳,当然。
【讨论】: