KillTimer — различия между версиями

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск
(Новая страница: «{{Description | Завершает работу таймера. }} {{NoteSetTimerUnstable}}<nowiki/> {{Params|timerid}} {{Param | timerid | ID таймера, с…»)
 
 
Строка 18: Строка 18:
 
new mytimerid = -1;
 
new mytimerid = -1;
  
public MyTimer();
+
forward MyTimer();
public MyTimer()
+
public MyTimer()
 
{
 
{
 
// Таймерная функция, срабатывающая раз в секунду.
 
// Таймерная функция, срабатывающая раз в секунду.

Текущая версия на 18:24, 6 октября 2018

Описание:

Завершает работу таймера.

Warning.png
Внимание!
Частое создание таймеров может привести к падению сервера (см. прим. ниже). Рекомендуется использовать одну из сторонних реализаций таймеров в плагинах TimerFix (за авторством KashCherry) или Timerfix (изначально за авторством udan11; на данный момент под сопровождением ziggi).


Параметры:

(timerid)
timerid ID таймера, созданного с помощью SetTimer() или SetTimerEx().


Возвращаемое значение:

Всегда возвращает 1.

Bug.png
Баг SA-MP
При уничтожении с помощью KillTimer() таймер лишь помечается как уничтоженный, выделенная под него память высвобождается только при выгрузке или перезагрузке скрипта. Чрезмерное создание таймеров (от нескольких сотен тысяч; зависит от хостинга) может привести к исчерпанию оперативной памяти и падению сервера при длительной работе без рестарта. Тем не менее, если у таймера однократное срабатывание (т.е. при создании параметр repeating был равен 0), после срабатывания он уничтожается с высвобождением памяти.
Данная проблема отсутствует в сторонних реализациях таймеров (см. выше, разд. "Описание").


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

new mytimerid = -1;

forward MyTimer();
public  MyTimer()
{
    // Таймерная функция, срабатывающая раз в секунду.
    // При 10-м срабатывании таймер уничтожается.
    static num_calls = 0;
    printf("Вызов #%d", ++num_calls);
    if (num_calls >= 10)
    {
        KillTimer(mytimerid);
        printf("Таймер уничтожен");
    }
}

public OnGameModeInit()
{
    mytimerid = SetTimer("MyTimer", 1000, 1);
}


См. также: