原則は、関数の実行前にクロック信号を設定することです。関数の実行が指定された時間を超えると、信号がトリガーされ、信号処理関数 (sig) が例外をスローし、外部関数によってキャッチされます。コード。これにより、元の関数の実行が中断され、次のコードが実行されます。関数が指定された時間内にある場合、クロック信号は関数の終了後にクリアされ、例外はスローされません。
この関数の説明を参照するには、PHP 公式にアクセスしてください。
pcntl_alarm (PHP 4 >= 4.3.0、PHP 5)
pcntl_alarm — プロセスのアラームクロック信号を設定します説明¶int pcntl_alarm (int $秒)
指定した秒数後に SIGALRM シグナルをプロセスに送信するタイマーを作成します。 pcntl_alarm() を呼び出すたびに、以前に設定されたアラーム信号がキャンセルされます。
パラメータ¶秒 待機する秒数。秒を 0 に設定すると、アラーム信号は作成されません。
戻り値¶最後のアラーム予約まで(アラーム信号送信前)の残り秒数を返します。前回のアラーム予約がない場合(または前回の予約が完了している場合)は0を返します。
例
コードをコピー | |
宣言(ティック = 1); 関数a() { 睡眠(10); 「終了」をエコーします; } 関数 b() { エコー「停止」; } 関数c() { usleep(100000); } 関数 sig() { 新しい例外をスローします; } 試してみてください { // アラーム信号を 1 秒ごとに実行するように設定します pcntl_alarm(1); //アラーム信号をインストールし、コールバックをバインドします pcntl_signal(SIGALRM, "sig"); あ(); //アラーム信号をキャンセル pcntl_alarm(0); } catch(例外 $e) { エコー「タイムアウト」; } b(); あ(); b(); |
添付、pcntl拡張機能のインストール
PHP を再コンパイルした後、構成プロンプトに --enable-pcntl を追加します
トラブルを避けるために、直接コンパイルしてください。
コードをコピー | |
#phpize # ./configure --with-php-config=/usr/local/php/bin/php-config # 作成&&作成インストール |