Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 2 из 2

Тема: Timer

  1. #1
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±

    Timer

    Всем привет! Задался я тут вопросом, казалось бы очень простым, но меня терзают смутные сомнения и паранойя того, что из-за возможной нагрузки на сервер секундный таймер меня подведет.
    PHP код:
    public SecondUpdate()
    {
        new 
    hourminutesecond;
        
    gettime(hourminutesecond);
        if(
    minute == && second == 0)
        {
            
    PayDay();
        }
        return 
    1;

    Решение есть, но оно скорее похоже на костыль из китайской пластмассы. Можно создать переменную вещественного типа и проверять ее секунд 5.

    PHP код:
    public SecondUpdate()
    {
        new 
    hourminutesecond;
        
    gettime(hourminutesecond);
        if(
    minute == && second 5LaunchPayDay true;
        if(
    minute == && second <= 5)
        {
            if(
    LaunchPayDay == true)     
            {
                
    LaunchPayDay false;
                
    PayDay();
            }
        }
        return 
    1;

    Извините, но мне стыдно даже за то, что такое решение в голову пришло) Ну а вообще, я думаю суть вопроса понятна. Может быть есть какие-то проверенные способы запуска PayDay.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Во-первых, никаких "возможных нагрузок, повлиявших на работу секундного таймера" быть не должно. Если такое вдруг появится - причину нужно отыскивать и исправлять, ибо подобные задержки ненормальны и могут повлиять не только на секундный таймер.

    Во-вторых, PayDay и прочие действия, которые нужно выполнять не раз в секунду, лучше запускать с конкретным интервалом. Для этого берём вот этот плагин (который, к тому же, делает таймеры гораздо более точными) и используем вот эту функцию для запуска таймера:
    PHP код:
    /**
     * <summary>An improved version of SetTimer.</summary>
     * <param name="func">Name of the public function to call.</param>
     * <param name="interval">Interval in milliseconds.</param>
     * <param name="delay">Time after this timer should be called for the first time.</param>
     * <param name="count">How many times it should repeat before it's killed (-1 for unlimited).</param>
     * <returns>The ID of the timer.</returns>
     */
    native SetTimer_(func[], intervaldelaycount); 
    Нас интересует параметр "delay". Собственно, при старте сервера высчитываем то, сколько миллисекунд осталось до нового часа (надеюсь, в школе учили переводить часы в минуты, минуты в секунды и т.п.) и указываем получившийся результат в "delay". А уже в "interval" указываем 3600000. Всё, таймер будет срабатывать каждый час ровно в 00 минут (ну если ты правильно сделаешь вычисление времени для "delay").

    Но, опять же, твоя проблема заключается не в таймере, а в нагрузке. И решение тут не в том, чтоб избрать другой способ подсчёта таймера, а в избавлении от нагрузки. Тогда и твой изначальный вариант будет работать вполне нормально.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    punkochel (24.06.2019)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •