At least on my Windows machine, the time_sleep_until function appears to calculate the number of microseconds between now and the sleep-until timestamp, and it appears to use unsigned 32-bit math in this calculation. This roundoff leads to a maximum sleep time of just under 4295 seconds (1 hour, 11 minutes, 35 seconds). To get longer sleep times, while still using time_sleep_until to minimize processor overhead, the following loop may be some help to you:
<?php
$sleepuntil = strtotime("tuesday 3pm");
while (time() < $sleepuntil)
time_sleep_until($sleepuntil);
// proceed with dated processing
?>
Of course, one could use something like "cron" instead, to avoid the script doing the extended sleep. Also note that time_nanosleep appears to do similar math, but it is somewhat more intuitive that the seconds parameter has an upper limit on what it can be. Still, both functions might report a warning when waking up prematurely due to roundoff.
time_sleep_until
(PHP 5 >= 5.1.0)
time_sleep_until — Hacer que el script duerma hasta el momento especificado
Descripción
bool time_sleep_until
( float
$timestamp
)
Hace que el script duerma hasta la marca de tiempo especificada dada por
timestamp.
Parámetros
-
timestamp -
La marca de tiempo en la que el script debería despertar.
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.3.0 | Esta función ahora está disponible en plataformas Windows. |
Errores/Excepciones
Si la timestamp especificada está en el pasado, esta
función generará un error de nivel E_WARNING.
Ejemplos
Ejemplo #1 Un ejemplo de time_sleep_until()
<?php
//devuelve false y genera una advertencia
var_dump(time_sleep_until(time()-1));
// puede funcionar solamente en ordenadores más rápidos, dormará durante 0.2 segundos
var_dump(time_sleep_until(microtime(true)+0.2));
?>
Notas
Nota: Todas las señales serán emitidas después de que despierte el script.
Ver también
- sleep() - Retrasar la ejecución
- usleep() - Retrasar la ejecución en microsegundos
- time_nanosleep() - Retrasar por un número de segundos y nanosegundos
- set_time_limit() - Limita el tiempo máximo de ejecución
purdue at nc dot rr dot com
05-May-2011 11:04
f dot schima at ccgmbh dot de
15-Feb-2010 09:32
Remember when using usleep() as a replacement for time_sleep_until() that usleep() can be interrupted by signals, time_sleep_until() not.
pasha
03-Sep-2009 06:11
To ensure that usleep() is called with the same argument as the one being tested - a positive number:
<?php
if (!function_exists('time_sleep_until')) {
function time_sleep_until($future) {
$sleep = ($future - microtime(1))*1000000;
if ($sleep<=0) {
trigger_error("Time in past", E_USER_WARNING);
return false;
}
usleep($sleep);
return true;
}
}
?>
roberto at spadim dot com dot br
16-Dec-2006 07:05
better implementation
<?php
if (!function_exists('time_sleep_until')) {
function time_sleep_until($future) {
if ($future < time()) {
trigger_error("Time in past", E_USER_WARNING);
return false;
}
usleep(($future - microtime(1))*1000000);
return true;
}
}
?>
ssnoyes at hotmail dot com
25-Nov-2005 11:58
Implementation for < 5.1 or Windows users
<?php
if (!function_exists('time_sleep_until')) {
function time_sleep_until($future) {
if ($future < time()) {
trigger_error("Time in past", E_USER_WARNING);
return false;
}
sleep($future - time());
return true;
}
}
?>
