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

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±

    GetTickCount & tickcount FIX

    Описание
    При беспрерывной работе сервера больше, чем 24 дня GetTickCount() и tickcount() будут вызывать проблемы. (Ибо будут возвращать значение, больше чем доступно для Integer)
    Хотфикс в хату собственно

    PHP код:
    stock h@@k_@GetTickCount()
    {
        new 
    _@tRET GetTickCount();
        return (
    _@tRET 0) ? (_@tRET = (0x7FFFFFFF) + _@tRET) : (_@tRET);
    }

    #if defined _ALS_GetTickCount
        #undef GetTickCount
    #else
        #define _ALS_GetTickCount
    #endif
    #define GetTickCount h@@k_@GetTickCount

    stock h@@k_@tickcount()
    {
        new 
    _@tRET tickcount();
        return (
    _@tRET 0) ? (_@tRET = (0x7FFFFFFF) + _@tRET) : (_@tRET);
    }

    #if defined _ALS_tickcount
        #undef tickcount
    #else
        #define _ALS_tickcount
    #endif
    #define tickcount h@@k_@tickcount 
    Автор
    Пельмень

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Это, конечно, хорошо, но кто в здравом уме будет держать сервер 24 дня в рабочем состоянии?
    Так, вопрос за засыпку :)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Это, конечно, хорошо, но кто в здравом уме будет держать сервер 24 дня в рабочем состоянии?
    Так, вопрос за засыпку :)
    Даже не знаю, возможно какой ни будь тестовый

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    Даже не знаю, возможно какой ни будь тестовый
    Гораздо логичнее будет просто настроить авторестарт, чем ради сомнительного фикса заставлять сервер делать лишние действия каждый вызов tickcount/GetTickCount =)
    А если уж совсем припрёт, можно использовать менее завистливую от Integer gettime для точных отсчётов.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

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

    Обычно эти функции используются для определения количества времени, прошедшего с определённого момента. Допустим, что GetTickCount() вернул 2147483647 (максимальное число, которое оно может вернуть), следующим тиком эта функция вернёт -2147483648, но с этим "фиксом" это будет 0. И после попытки определения времени, прошедшего с первого тика, результатом будет 2147483647 - 0 = 2147483647, что, естественно, неправильно.

    Вот здесь можно посмотреть на реальный фикс: http://pro-pawn.ru/showthread.php?14127

    Но, по сути, здесь вообще ничего можно не фиксить, вычисление выражения 2147483647 - -2147483648 даст нужный результат: 1, что правильно. Правда такая игра с переполнением, как по мне, не лучшая практика.
    Последний раз редактировалось ziggi; 06.01.2017 в 18:55.

  6. 2 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (06.01.2017) DCPSHER (18.06.2018)
 

 

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

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

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

Ваши права

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