【问题标题】:How to echo something every 4 minutes while in an endless loop如何在无限循环中每 4 分钟回显一次
【发布时间】:2012-10-13 22:44:02
【问题描述】:

我有一个使用while(true) 运行的脚本,所以它会一直运行直到它死掉。我希望能够让它每 4 分钟回显一次,我该怎么做?该脚本在命令提示符下运行,它使用while(true),所以它令人困惑,而且我不知道如何让它每 4 分钟执行一次。 我怎样才能让它在 while(true) 中时每 4 分钟回显一次?

【问题讨论】:

  • 可能是睡眠或延迟功能
  • 您是在尝试生成一个服务器进程以通过 PHP 完成一些工作,还是您正在执行的本地脚本?

标签: php


【解决方案1】:

你可以试试

while(true)
{
    sleep(240); // sleep for 240 sec
    echo " Hello World" ;
}

或者

$time = time();
while ( true ) {
    /*
     * Play Some Ball
     */

    if ((time() - $time) >= 240) {
        echo date("Y:m:d g:i:s"), PHP_EOL;
        $time = time();
    }
    sleep(2);
}

使用Time = 2 sec, Sleep = 1 sec 进行输出测试

2012:10:14 12:50:56
2012:10:14 12:50:58
2012:10:14 12:51:00
2012:10:14 12:51:02
2012:10:14 12:51:04
2012:10:14 12:51:06
2012:10:14 12:51:08
2012:10:14 12:51:10
2012:10:14 12:51:12
2012:10:14 12:51:14

【讨论】:

  • 我不能让它睡觉,因为我需要它激活。
  • 我总是建议在将永远运行的紧密循环上小睡一会儿。那个或其他一些产生方法来避免一个消耗所有的循环。
  • @jheddings 我完全同意你的看法......很好
  • @jheddings 太糟糕了,已经超过了日常声誉......谢谢:)
  • 是的,小睡眠可以让作业调度器使用类似 usleep 的东西进行更改。
【解决方案2】:

使用sleep 方法实际上会使您的脚本停止运行。如果这是你想要发生的,我不是 100%。

解决此问题的另一种方法是比较每次迭代中最后一个“echo”命令的时间戳。

$echo_time = time();
$interval = 4*60;
while(true){
  if ($echo_time + $interval >= time()){
    echo "$interval seconds have passed...";
    $echo_time = time(); // set up timestamp for next interval
  }
  // other uninterrupted code goes here.
}

这将允许循环中的代码继续运行,并且仅在每次迭代开始时检查时间。

【讨论】:

  • 在 php7 中 echo "$interval seconds have passed..."; 应该是:echo $interval . "seconds have passed..."; 或:echo $interval . 'seconds have passed...'; // single quot is faster than double quot
【解决方案3】:

尝试在循环中添加while(true) { ... }sleep() 参数函数。

$sleep = 4*60;
while(true)
{
    # waiting...        
    sleep($sleep);
    # work after 240 mins
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2017-06-30
    相关资源
    最近更新 更多