2

我想在选定的时间后停止执行循环。意味着循环时它将尝试执行一个参数并花费很长时间,然后它将完成工作并转到下一个参数。如 :

for ($i=2 ; $i <= 100 ; $i++)

在这里,假设它将循环 3,4,5,6,7,8,9,10 并且在 11 中将需要很长时间才能执行。所以我只想在(即 10 秒)之后停止它并采取下一个选项,我的意思是 12、13、14 ......等等。所以,我该怎么做。我设置了这个set_time_limit(10);,但它在这里不起作用。

4

2 回答 2

2

您可以使用microtime()来测量经过的时间。请注意,这只会在迭代完成后中断。

$start = microtime(true);
$limit = 10;  // Seconds

for ($i=2 ; $i <= 100 ; $i++) {
  if (microtime(true) - $start >= $limit) {
    break;
  }
}
于 2012-11-02T12:52:12.567 回答
0

那是相当复杂的。您必须创建一个单独的线程来进行处理,以便您的主线程可以检查它是否已经运行了太长时间。

这些线程在 PHP 中称为“分叉”。

您必须研究过程控制功能,尤其是[pcntl_fork][2]. 然后,使用pcntl_sigtimedwait,您可以在给定的超时期间等待分叉的进程。返回时pcntl_sigtimedwait,可以查看它的返回值,看看进程是否超时。

于 2012-11-02T12:45:48.330 回答