7

実行に使用するスクリプトがあるwhile(true)ため、死ぬまで永遠に実行されます。4分に1回何かをエコーできるようにしたいのですが、どうすればできますか? スクリプトはコマンドプロンプトで実行され、それを使用するwhile(true)ため、混乱を招くだけでなく、4分ごとに実行する方法がわかりません. にいる間、4分ごとに何かをエコーさせるにはどうすればよいwhile(true)ですか?

4

3 に答える 3

7

あなたが試すことができます

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
于 2012-10-13T22:45:40.530 に答える
3

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.
}

これにより、ループ内のコードを実行し続けることができ、各反復の開始時にのみ時間をチェックできます。

于 2012-10-13T22:48:12.003 に答える
1

while(true) { ... }sleep() パラメータ関数のループに追加してみてください。

$sleep = 4*60;
while(true)
{
    # waiting...        
    sleep($sleep);
    # work after 240 mins
}
于 2012-10-13T22:47:02.223 に答える