こんにちは!フリーエンジニアのヤマシタです。
PHPではsleep関数を使用してプログラムの実行を一時停止することができます。
この記事では、
・sleepとは?
・sleepの使い方
という基本的な内容から、
・ループでsleepを使用する方法
・マイクロ秒単位で一時停止する方法
などの応用的な使い方に関しても解説していきます。
今回はそんなsleepを使用する方法について、わかりやすく解説します!
sleepとは
実行中のプログラムを一時停止するには、sleep関数を使用します。
sleep関数は、引数に一時停止する秒数を指定します。10秒スリープするなら引数に10を指定します。
int sleep (int $秒数);
返り値として、成功した場合にはゼロを、失敗した場合にはFALSEを返します。
FALSEを返すタイミングとしては、プログラムが何らかのエラーにより、シグナルを受信した場合に発生します。
sleepの使い方
ここでは、実際にsleep関数の使い方を見ていきましょう。
以下に指定した秒数分処理を一時停止するサンプルを紹介いたします。
<?php echo date('Y-m-d H:i:s'); echo '<br>'; //10秒スリープ sleep(10); echo date('Y-m-d H:i:s'); ?>
実行結果 2017-05-28 09:44:03 2017-05-28 09:44:13
サンプルではsleep関数の引数に一時停止する秒数として10を指定しています。実行結果のとおり10秒処理が一時停止していることがわかりますね!
ループ処理を一時停止する
以下に無限ループ内で繰り返し処理ごとにをsleepで1秒停止するプログラムを紹介します。
<?php $i = 0; while(true){ echo $i; if ($i >= 10){ echo 'プログラム終了'; break; } sleep(1); $i++; } ?>
sleep関数は、主に時間を計測するためのタイマー処理や、マルチスレッドなどで行う無限ループ処理などでよく使われます。
無限ループ処理を延々と実行しているとCPUの負荷が高まり、リソースが不足してメモリリークなどが発生する可能性があります。
また、無限ループの間はコンピュータの負荷が高まるため、他の処理が受付なくなるなどの弊害が発生します。
そこで無限ループ内でsleep処理を実行すると、その間処理がsleep関数に移行してコンピュータの負荷を下げることができます。
そのため、無限ループ処理を行うときは、sleep関数の使用を意識しておきましょう。
マイクロ秒単位で指定する
ここではusleep関数を使用して、マイクロ秒単位まで停止時間を指定する方法を紹介します。
usleepの使い方
プログラムをマイクロ秒単位で一時停止するにはusleep関数を使用します。
usleep関数は、sleep関数と同じく引数に一時停止する秒数を指定します。
void usleep(int $マイクロ秒数);
なお、usleep関数は値を返すことはありません。
以下にusleep関数を使用してマイクロ秒単位で一時停止する方法を記述します。
<?php $now1 = new DateTime(); //時刻をマイクロ秒まで取得 echo $now1->format('Y-m-d H:i:s.u'); echo '<br>'; //0.2秒スリープ usleep(200000); $now2 = new DateTime(); echo $now2->format('Y-m-d H:i:s.u'); ?>
実行結果 2017-05-28 19:21:58.506058 2017-05-28 19:21:58.707265
サンプルでは、usleep関数の引数でマイクロ秒単位の秒数である200000マイクロ秒(0.2秒)を指定しています。
実行結果のとおり、約0.2秒停止しているのがわかりますね!
まとめ
ここではsleep関数を使用して、プログラムを一時停止する方法や無限ループで使用する方法、sleep関数の用途やusleep関数を使用してマイクロ秒単位で指定する方法などを解説しました。
sleep関数は処理時間を計測したり、マルチスレッドや無限ループなどの処理でよく使われますので、この機会に覚えておきましょう。
もし、sleep関数の使い方を忘れてしまったら、この記事を思い出してくださいね。