Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для HarrWe
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±

    "Оптимизация" или миф?

    Приветствую, недавно 1 человек показал мне интересную "фишку". Практически в каждом моде есть еже-секундный таймер, в котором обычно обрабатываются игроки и транспорт. Так вот, суть этой "фишки" заключается в том что в OnGameModeInit создаётся 1 таймер,
    Код:
    SetTimerEx("UpdatePlayers",500,0,"");
    Внутри этого таймера создаётся другой таймер:
    Код:
    SetTimerEx("UpdateVehicles",500,0,"");
    И внутри этого таймера создаётся снова первый таймер.
    Код:
    SetTimerEx("UpdatePlayers",500,0,"");
    Если подумать то кажется что это неплохая оптимизация. Нарисовал график как я себе это представляю.
    Это только теория, что вы скажете на это? По сути эта "фича" избавляет мод от пиковых нагрузок каждую секунду.

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Уж лучше реализовать это одним таймером. Будет быстрее, точнее и понятнее.

    PHP код:
    SetTimer("UpdateEverything"5001); 
    PHP код:
    enum E_UPDATE_STATUS {
        
    bool:E_UPDATE_PLAYERS,
        
    bool:E_UPDATE_VEHICLES,
    }

    static
        
    gUpdateStatus[E_UPDATE_STATUS];

    public 
    UpdateEverything()
    {
        if (!
    gUpdateStatus[E_UPDATE_PLAYERS]) {
            
    UpdatePlayers();
            
    gUpdateStatus[E_UPDATE_PLAYERS] = true;
        } else if (!
    gUpdateStatus[E_UPDATE_VEHICLES]) {
            
    UpdateVehicles();
            
    gUpdateStatus[E_UPDATE_VEHICLES] = true;
        } else {
            for (new 
    E_UPDATE_STATUS:status_:status sizeof(gUpdateStatus); _:status++) {
                
    gUpdateStatus[status] = false;
            }
        }

    P.S. Код не тестил, мог накосячить с тегами.

  3. #3
    Аватар для HarrWe
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.05.2016
    Сообщений
    144
    Репутация:
    11 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Уж лучше реализовать это одним таймером. Будет быстрее, точнее и понятнее.

    PHP код:
    SetTimer("UpdateEverything"5001); 
    PHP код:
    enum E_UPDATE_STATUS {
        
    bool:E_UPDATE_PLAYERS,
        
    bool:E_UPDATE_VEHICLES,
    }

    static
        
    gUpdateStatus[E_UPDATE_STATUS];

    public 
    UpdateEverything()
    {
        if (!
    gUpdateStatus[E_UPDATE_PLAYERS]) {
            
    UpdatePlayers();
            
    gUpdateStatus[E_UPDATE_PLAYERS] = true;
        } else if (!
    gUpdateStatus[E_UPDATE_VEHICLES]) {
            
    UpdateVehicles();
            
    gUpdateStatus[E_UPDATE_VEHICLES] = true;
        } else {
            for (new 
    E_UPDATE_STATUS:status_:status sizeof(gUpdateStatus); _:status++) {
                
    gUpdateStatus[status] = false;
            }
        }

    P.S. Код не тестил, мог накосячить с тегами.
    Спасибо за совет, но почему нельзя было сделать так? Убрав 1 условие else if, а сделать в else.
    PHP код:
    if (!update_status[update_players])
    {
        
    update_status[update_vehicles] = false;
        
    update_status[update_players] = true;
    }
    else
    {  
        
    update_status[update_players] = false;
        
    update_status[update_vehicles] = true;

    P.S уже догадался. Что бы легко было добавлять новые пункты для обновления.
    Последний раз редактировалось HarrWe; 26.06.2017 в 23:54.

 

 

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

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

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

Ваши права

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