Спящая разница во времени

$lastRequestTimestamp = microtime(true);
if (microtime(true) - $lastRequestTimestamp < 1) {
  sleep(1);
}
$lastRequestTimestamp = microtime(true);

// now continue with the request ... 

... работает, но если разница составляет даже несколько миллисекунд, он спит для 1 second что важно, учитывая количество запросов, которые я должен сделать.

Как сделать так, чтобы скрипт спал только так, чтобы между запросами всегда была ровно 1 секунда, не меньше и не больше.

2 ответа

Решение
$timeDifferenceSecs = (microtime(true) - $lastRequestTimestamp);
$sleepMicrosecs = (1 - $timeDifferenceSecs)*1000000;
usleep($sleepMicrosecs);

Вы можете использовать usleep вместо этого, таким образом, вы можете спать в течение микросекунд вместо полных секунд.

Другие вопросы по тегам