我想在选定时间后停止执行循环。意味着循环它会尝试执行一个参数并花费很长时间,然后它会完成工作并转到下一个参数。如:在选定时间后停止执行循环
for ($i=2 ; $i <= 100 ; $i++)
这里,假定它将循环3,4,5,6,7,8,9,10和11这将需要很长的时间来执行。所以我只是想停止它(即10秒)后采取下一个选项我的意思是12,13,14 ...等 所以,我该如何做到这一点。我建立了这个set_time_limit(10);
,但它不在这里工作。
我想在选定时间后停止执行循环。意味着循环它会尝试执行一个参数并花费很长时间,然后它会完成工作并转到下一个参数。如:在选定时间后停止执行循环
for ($i=2 ; $i <= 100 ; $i++)
这里,假定它将循环3,4,5,6,7,8,9,10和11这将需要很长的时间来执行。所以我只是想停止它(即10秒)后采取下一个选项我的意思是12,13,14 ...等 所以,我该如何做到这一点。我建立了这个set_time_limit(10);
,但它不在这里工作。
这很复杂。你将不得不创建一个单独的线程来处理,所以你的主线程可以检查它是否运行时间过长。
这些线程在PHP中被称为'forks'。
您必须调查Process Control functions,尤其是[pcntl_fork][2]
。然后,使用pcntl_sigtimedwait,您可以在给定的超时期间等待分叉进程。当pcntl_sigtimedwait
返回时,您可以检查其返回值以查看过程是否超时。
您可以使用microtime()来衡量已用时间。请注意,这只会在迭代完成后中断。
$start = microtime(true);
$limit = 10; // Seconds
for ($i=2 ; $i <= 100 ; $i++) {
if (microtime(true) - $start >= $limit) {
break;
}
}
与http://stackoverflow.com/q/10587323/1689451相关 –