【问题标题】:Time Approach Algorithm?时间逼近算法?
【发布时间】:2011-08-15 15:50:56
【问题描述】:

任何人都可以解释一下我将如何为目标时间创建一个接近算法吗?有 sleep(x),其中 x 最初很大,随着目标时间的临近而减小?

【问题讨论】:

  • 请您澄清一下您的意思?你的意思是你有一个循环在每次迭代中调用sleep(),并且你希望它在每次迭代中使用不同的值?
  • 只睡到目标时间不满足你的要求怎么办?
  • @Keith Thompson:睡眠不能保证在指定的时间准确返回,我认为他正试图从中获得更高的精度。
  • 似乎 (a) 调用 sleep(x) 一次,x = 总时间,或者 (b) 在循环中以最小正时间延迟调用 sleep,直到您期望超出标记...将是仅有的两个有意义的选择。谁在乎你叫了多少次 sleep?

标签: c algorithm time sleep


【解决方案1】:

这取决于您的限制,但一个简单的解决方案是始终将剩余时间除以 2,然后在这段时间内休眠。它具有对数复杂度,这很好。

通常操作系统只保证 10 毫秒的粒度,所以当时间低于 20 毫秒时停止休眠。

【讨论】:

    【解决方案2】:
    void sleep(unsigned long howLong, unsigned decrement)
    {
       if (howLong == 0)
          return;
       if (decrement < 2)
       {
          Sleep(howLong);
          return;
       }
    
       unsigned long delay = howLong / decrement;
       while (delay)
       {
          Sleep(delay);
          delay /= decrement;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多