SetTimerEx
Материал из Pro-Pawn Wiki
Описание:
Создаёт таймер для отложенного вызова функции.
Внимание! |
Частое создание таймеров может привести к падению сервера (см. прим. ниже). Рекомендуется использовать одну из сторонних реализаций таймеров в плагинах TimerFix (за авторством KashCherry) или Timerfix (изначально за авторством udan11; на данный момент под сопровождением ziggi). |
Параметры:
(funcname[], interval, repeating, const format[], {Float,_}:...) |
funcname[] | Название функции. |
interval | Интервал срабатывания таймера (в миллисекундах). |
repeating | Указывает, должен ли таймер срабатывать многократно. При 0 таймер срабатывает только один раз и самоуничтожается, при ненулевом значении - срабатывает многократно до тех пор, пока не будет уничтожен с помощью функции KillTimer() .
|
const format[] | Строка со спецификаторами для обозначения типов аргументов. |
{Float,_}:... | Аргументы, передаваемые целевой функции при срабатывании таймера. |
Возвращаемое значение:
ID созданного таймера.
Баг SA-MP |
Отсчёт времени в таймерах неточен. Для большей точности доступны сторонние реализации таймеров (см. выше, разд. "Описание").
При уничтожении с помощью KillTimer() таймер лишь помечается как уничтоженный, выделенная под него память высвобождается только при выгрузке или перезагрузке скрипта. Чрезмерное создание таймеров (от нескольких сотен тысяч; зависит от хостинга) может привести к исчерпанию оперативной памяти и падению сервера при длительной работе без рестарта. Тем не менее, если у таймера однократное срабатывание (т.е. при создании параметр repeating был равен 0 ), после срабатывания он уничтожается с высвобождением памяти.Данная проблема отсутствует в сторонних реализациях таймеров (см. выше, разд. "Описание"). Таймер создаётся даже в том случае, если функция с указанным названием не существует или интервал срабатывания меньше 0. При каждом срабатывании таймера сервер заново пытается отыскать функцию, вместо того, чтобы найти её один раз и запомнить её ID при создании таймера. Содержимое массива funcname не изменяется во время работы функции, однако сам массив объявлен без атрибута const :
native SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...); const -корректный) заголовок функции должен выглядеть так:
native SetTimerEx(const funcname[], interval, repeating, const format[], {Float,_}:...); const , компилятор считает, что функция записывает в него данные, и потому не позволяет передавать в функцию неизменяемые массивы, выдавая ошибку несоответствия типов.
static const function_names[] = { "MyFunction0", "MyFunction1" }; new r = random(2); SetTimerEx(function_names[r], 1000, 0, ""); // error 035: argument type mismatch (argument 1) |
Пример использования:
forward MyTimerFunction(a, b);
public MyTimerFunction(a, b)
{
printf("%d, %d", a, b);
}
main()
{
SetTimerEx("MyTimerFunction", 1000, 0, "dd", 1, 2);
}
public MyTimerFunction(a, b)
{
printf("%d, %d", a, b);
}
main()
{
SetTimerEx("MyTimerFunction", 1000, 0, "dd", 1, 2);
}
См. также: