Skip to content

Timer Class Documentation

Maxim Rakov edited this page Jun 13, 2024 · 4 revisions

Класс Timer

Класс Timer в пространстве имен Php\Threading предоставляет различные методы для работы с таймерами. Этот класс позволяет настраивать таймеры, которые могут запускаться один раз после указанного периода, повторяться через интервалы или срабатывать по условию. Эта документация предоставляет обзор класса, его методов и примеры использования.

Обзор

Класс Timer предлагает следующие возможности:

  1. Запуск задачи один раз после указанного периода.
  2. Запуск задачи повторно через указанные интервалы.
  3. Срабатывание задачи по условию.
  4. Изменение времени задержки и периода существующего таймера.
  5. Остановка, перезапуск и отмена таймеров.
  6. Приостановка выполнения скрипта на указанный период.
  7. Отмена всех активных таймеров.

Методы

Статические методы

after

public static function after(string $period, callable $callback): Timer

Выполнить один раз после указанного периода в формате:

  • '' - миллисекунды
  • 's' - секунды
  • 'm' - минуты
  • 'h' - часы
  • 'd' - дни (24 часа)
  • Например, '2h 30m 10s', '2.5s', '2000', или '1m 30s'.

every

public static function every(string $period, callable $callback): Timer

Выполнять задачу через указанные интервалы, как в методе after.


trigger

public static function trigger(callable $trigger, callable $callback, int $checkPeriod = 16): Timer

Создать триггерный таймер, который вызовет callback, когда триггерный callback вернет true.

setTimeout

public static function setTimeout(callable $taskCallback, int $millis): Timer

Запустить задачу один раз после периода задержки в миллисекундах (аналогично JavaScript setTimeout).


setInterval

public static function setInterval(callable $taskCallback, int $millis): Timer

Запускать задачу повторно через указанные интервалы (аналогично JavaScript setInterval).


sleep

public static function sleep(string $period)

Приостановить выполнение на указанный период.


cancelAll

public static function cancelAll()

Отменить все запланированные задачи таймера.


shutdownAll

Копировать код
public static function shutdownAll()

Завершить все таймеры и систему таймеров.

parsePeriod

public static function parsePeriod(string $value): int

Преобразовать строковый период в количество миллисекунд.


Методы экземпляра

cancel

public function cancel()

Отменить задачу таймера.


run

public function run()

Немедленно запустить задачу таймера.


stop

public function stop()

Остановить задачу таймера.


restart

public function restart()

Перезапустить задачу таймера.


change

public function change(int $dueTime, int $period)

Изменить время задержки и период таймера.


Свойства

isRunning

public bool $isRunning

Возвращает true, если таймер запущен, false если остановлен.


isDisposed

Копировать код
public bool $isDisposed

Возвращает true, если таймер удален.


Пример использования

Пример, демонстрирующий использование класса Timer:

<?php
use Php\Threading\Timer;

// Создание таймера с интервалом в 1 секунду / Create a timer with an interval of 1 second
$intervalTimer = Timer::every('1s', function() {
    echo "This task runs every 1 second.\n";
});

// Проверка состояния таймера / Check the timer state
if ($intervalTimer->isRunning) {
    echo "The timer is currently running.\n";
} else {
    echo "The timer is not running.\n";
}

// Остановка таймера через 5 секунд / Stop the timer after 5 seconds
Timer::setTimeout(function() use ($intervalTimer) {
    $intervalTimer->stop();
    echo "Timer stopped.\n";

    // Проверка состояния таймера после остановки / Check the timer state after stopping
    if (!$intervalTimer->isRunning) {
        echo "The timer has been stopped.\n";
    }
}, 5000);

// Перезапуск таймера через 10 секунд / Restart the timer after 10 seconds
Timer::setTimeout(function() use ($intervalTimer) {
    $intervalTimer->restart();
    echo "Timer restarted.\n";

    // Проверка состояния таймера после перезапуска / Check the timer state after restarting
    if ($intervalTimer->isRunning) {
        echo "The timer is running again.\n";
    }
}, 10000);

// Изменение времени задержки и периода таймера через 15 секунд / Change the timer's due time and period after 15 seconds
Timer::setTimeout(function() use ($intervalTimer) {
    $intervalTimer->change(2000, 2000); // Установить задержку и период в 2 секунды / Set delay and period to 2 seconds
    echo "Timer interval changed to 2 seconds.\n";
}, 15000);

// Применение sleep для задержки выполнения скрипта / Use sleep to delay script execution
echo "Going to sleep for 3 seconds.\n";
sleep(3);
echo "Woke up after sleeping.\n";

// Отмена конкретного таймера / Cancel the specific timer
$intervalTimer->cancel();
echo "Canceled the interval timer.\n";

// Проверка состояния таймера после отмены / Check the timer state after cancellation
if ($intervalTimer->isDisposed) {
    echo "The timer has been disposed.\n";
}

// Отмена всех таймеров / Cancel all timers
Timer::cancelAll();
echo "All timers have been canceled.\n";