播放速度的一般算法

时间:2011-10-04 22:24:50

标签: algorithm

是否存在解决具有以下属性的日志文件的播放速度的通用算法。如果可能的话,不必阅读整个日志文件也不错。

  • 每一行都包含一个时间戳
  • 采样率未知

然后播放将以2x的任何速度播放。例如。

想到了几种不同的方法,但认为可能存在一种广义算法。

  1. 读取第一个时间戳并使用它来决定是否应该运行下一行,scheduler-esce。
  2. 读取所有将计划分配到内存中的行,然后每行将在正确的时间触发。您必须再次阅读第一行以获得参考点。
  3. 感谢

1 个答案:

答案 0 :(得分:0)

如果日志文件中的行按时间顺序排列,则非常简单。

  1. 阅读第一行,保存时间戳,然后执行。
  2. 阅读第二行,计算时间差异,使用速度因子进行调整,并将该时间间隔添加到当前时间。
  3. 结果是执行下一个命令的时间。
  4. 在适当的时间执行命令并循环到步骤2.
  5. 所以如果你想以2x运行:

    cmd = read_log
    previous_time = cmd.time;
    while (true)
    {
        new_time = cmd.time;
        execute_time = current_time + (new_time - previous_time)/2.0;
        previous_time = new_time;
        // wait here until it's time to execute the command
        execute_command();
        cmd = read_log
    }
    

    这是执行此操作的单线程方式。不过,我建议使用两个线程:一个用于读取日志和队列命令,另一个用于读取队列和执行命令。