Обнаружение тайм-аута для блока кода в PHP

Есть ли способ прервать блок кода, если он занимает слишком много времени в PHP? Возможно, что-то вроде:

//Set the max time to 2 seconds
$time = new TimeOut(2);
$time->startTime();

sleep(3)

$time->endTime();
if ($time->timeExpired()){
    echo 'This function took too long to execute and was aborted.';
} 

Это не обязательно должно быть точно так, как указано выше, но есть ли какие-нибудь собственные функции или классы PHP, которые делают что-то подобное?

Изменить : ответ Бена Ли с pcnt_fork было бы идеальным решением, за исключением того, что оно недоступно для Windows. Есть ли другой способ сделать это с помощью PHP, который работает для Windows и Linux, но не требует внешней библиотеки?

Редактировать 2 : Решение XzKto работает в некоторых случаях, но не постоянно, и я не могу уловить исключение, что бы я ни пытался. Пример использования определяет тайм-аут для модульного теста. Если время теста истекло, я хочу его прервать, а затем перейти к следующему тесту.

13
задан VirtuosiMedia 22 September 2011 в 03:06
поделиться