int \Workerman\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])

Esegue una funzione o un metodo di classe a intervalli regolari.

Nota: il timer viene eseguito nel processo corrente e non genera nuovi processi o thread per eseguire il timer in Workerman.

Parametri

time_interval

Intervallo di tempo tra le esecuzioni, in secondi, con supporto per numeri decimali, fino a 0,001, cioè fino a millisecondi.

callback

Funzione di richiamo. Nota: se la funzione di richiamo è un metodo di classe, il metodo deve essere di tipo public.

args

Parametri della funzione di richiamo, deve essere un array di valori dei parametri.

persistent

Indica se il timer è persistente. Se si desidera eseguire il timer solo una volta, passare false (i compiti eseguiti una sola volta si autosmettono dopo l'esecuzione e non è necessario invocare Timer::del()). Il valore predefinito è true, quindi il timer viene eseguito regolarmente.

Valore restituito

Restituisce un intero che rappresenta l'ID del timer e che può essere utilizzato per cancellare il timer chiamando Timer::del($timerid).

Esempi

1. Funzione di timer come funzione anonima (chiusura)

use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';

$task = new Worker();
// Avvia più processi per eseguire il compito temporizzato, fare attenzione a problemi di concorrenza nei processi multipli
$task->count = 1;
$task->onWorkerStart = function(Worker $task)
{
    // Esegue una funzione ogni 2.5 secondi
    $time_interval = 2.5;
    Timer::add($time_interval, function()
    {
        echo "attività in esecuzione\n";
    });
};

// Esegue il worker
Worker::runAll();

2. Imposta il timer solo in un processo specifico

Un'istanza di worker ha 4 processi, imposta il timer solo nel processo con ID 0.

use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker();
$worker->count = 4;
$worker->onWorkerStart = function(Worker $worker)
{
    // Imposta il timer solo nel processo con ID 0, gli altri processi (1, 2, 3) non impostano nessun timer
    if($worker->id === 0)
    {
        Timer::add(1, function(){
            echo "4 processi worker, imposta il timer solo nel processo 0\n";
        });
    }
};
// Esegue il worker
Worker::runAll();