Алгоритм временного подхода? - PullRequest
1 голос
/ 15 августа 2011

Может ли кто-нибудь пролить немного света на то, как я могу создать алгоритм захода на посадку для заданного времени; имея sleep (x), где x изначально большой и уменьшается по мере приближения целевого времени?

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Это зависит от ваших ограничений, но простое решение - всегда делить оставшееся время на 2, а затем спать в течение этого времени.Он имеет логарифмическую сложность, и это нормально.

Часто ОС гарантирует гранулярность только 10 мс, поэтому прекращайте спать, когда время падает ниже 20 мс.

1 голос
/ 15 августа 2011
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;
   }
}
...