函式名:EvLoop::fork()
函式描述:在 libev 事件迴圈中建立一個子程序(fork),並在子程序中繼續事件迴圈。
適用版本:此函式在 libev 版本 >= 3.0 中可用,在 PHP 版本 >= 5.2.0 中可用。
用法:
EvLoop::fork(callable $callback, mixed $data = NULL, float $priority = 0.0) : void
引數:
$callback
:子程序中要執行的回撥函式,即事件迴圈的程式碼。$data
:傳遞給回撥函式的附加資料,預設為 NULL。$priority
:子程序優先順序,預設為 0.0。較高的值將使子程序優先處理事件。
示例:
$loop = new EvLoop();
$loop->fork(function () {
// 在子程序中執行的程式碼
echo "子程序開始執行\n";
// 建立一個定時器事件,每秒執行一次
$timer = $loop->timer(0, 1, function () {
echo "定時器事件觸發\n";
});
// 在子程序中執行事件迴圈
$loop->run();
echo "子程序結束\n";
});
// 在主程序中執行事件迴圈
$loop->run();
echo "主程序結束\n";
在上面的示例中,我們首先建立了一個新的 EvLoop
物件。然後,我們使用 fork()
方法在該事件迴圈中建立了一個子程序。在子程序中的回撥函式中,我們首先列印出 "子程序開始執行" 的訊息,並建立了一個每秒觸發一次的定時器事件。然後,我們呼叫 run()
方法,使子程序開始執行事件迴圈。在主程序中的回撥函式中,我們首先執行了主程序的事件迴圈,然後列印出 "主程序結束" 的訊息。最後,在子程序的回撥函式中,我們列印出 "子程序結束" 的訊息。
注意:fork()
方法不會自動終止父程序,因此在父程序中需要手動停止事件迴圈。