在我的机器上,PHP程序
<?php
$now= time();
echo "Now: ".$now."\n";
$waituntil= $now+5;
echo "Wait until: ".$waituntil."\n";
time_sleep_until($waituntil);
echo "Now: ".time()."\n";
?>
产生输出,例如
Now: 1492614718
Wait until: 1492614723
Now: 1492614722
现在我想知道为什么time_sleep_until
函数没有等到指定的时间(它总是在指定时间之前持续一秒)。
如何实现程序等到指定的linux时间戳?
编辑:
我添加了microtime(true)
,现在得到以下结果:
<?php
$now= time();
$nowmicro= microtime(true);
echo "Now: ".$now."\n";
echo "Now micro: ".$nowmicro."\n";
$waituntil= $now+5;
echo "Wait until: ".$waituntil."\n";
time_sleep_until($waituntil);
$now= time();
$nowmicro= microtime(true);
echo "Now: ".$now."\n";
echo "Now micro: ".$nowmicro."\n";
?>
产生
Now: 1492616333
Now micro: 1492616333.1153
Wait until: 1492616338
Now: 1492616337
Now micro: 1492616338.0001
答案 0 :(得分:2)
time_sleep_until
使用microtime
。如果您使用microtime(true)
代替time()
,您将获得正确的结果:
Now: 1492615646.9312
Wait until: 1492615651.9312
Now: 1492615651.9313
time()
和microtime()
不同,请点击此处了解详情:https://stackoverflow.com/a/11890155/994054
证明:
...
time_sleep_until($waituntil);
echo "Now: ".microtime(true)."\n";
echo "Now: ".time()."\n";
给了我
Wait until: 1492615871
Now: 1492615871.0001
Now: 1492615870
我不知道time()
使用time_sleep_until
后给出不同结果的确切原因,您必须深入研究PHP C代码
值得一提的是time_sleep_until()
usleep
答案 1 :(得分:1)
我自己运行,得到以下结果:
Now: 1492615301
Wait until: 1492615306
Now: 1492615306
你在运行什么PHP版本?据我所知,在早期版本(5.3之前的版本)中,这个功能在Windows上效果不佳
答案 2 :(得分:0)
也许,更好的解决方案是使用sleep
函数设置超时?您可以找到更多here。
因此,您的代码将如下所示:
<?php
$now= time();
echo "Now: $now".PHP_EOL;
$sleepTimeout= 5;
echo "Sleep timeout: $sleepTimeout".PHP_EOL;
sleep($sleepTimeout);
echo "Time after sleep: ".time().PHP_EOL;
?>
的问候。