PHP Conference Japan 2024

parallel\Runtime::close

(0.8.0)

parallel\Runtime::closeRuntime 優雅地結束

說明

public parallel\Runtime::close(): void

請求關閉 Runtime。

注意:

排程執行的任務將在關閉發生之前執行。

例外

警告

如果 Runtime 已經關閉,則會拋出 parallel\Runtime\Error\Closed 例外。

新增註解

使用者貢獻的註解 1 則註解

3
andre at webtechnik dot ch
3 年前
這是一個簡單的測試,展示 close 和 kill 如何運作。

<?php
/**
* 測試關閉和終止
* - 主執行緒寫入 main.log
* - 第二個執行緒寫入 thread.log 和 shutdown.log
* - 主執行緒運行 10 秒,第二個執行緒運行 20 秒
* - close 會等待直到第二個執行緒停止
* - kill 不等待並立即終止第二個執行緒
*/

// 主執行緒
logToFile("start");

// 建立第二個執行緒
$thread = new parallel\Runtime();
$thread->run(function(){

// 執行緒關閉時要做什麼
register_shutdown_function ( function(){file_put_contents("shutdown.log",date('Y-m-d H:i:s') . "\t 最後遺願");} );

// 迴圈並計數 20 秒
$c=0;
while (
$c++ < 20){
sleep(1);
echo
$c."|";
file_put_contents("thread.log",date('Y-m-d H:i:s') . "\t" . $c.PHP_EOL, FILE_APPEND);
}
});

// 睡眠 10 秒
sleep(10);

// 主執行緒立即終止執行緒
//$thread->kill();

// 主執行緒等待執行緒
$thread->close();

logToFile("end");

function
logToFile($msg){
echo
PHP_EOL.$msg.PHP_EOL;
file_put_contents("main.log",date('Y-m-d H:i:s') . "\t" . $msg.PHP_EOL, FILE_APPEND);
}
?>
To Top