我想在選定時間後停止執行循環。意味着循環它會嘗試執行一個參數並花費很長時間,然後它會完成工作並轉到下一個參數。如:在選定時間後停止執行循環
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相關 –