Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 18
  1. #1
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±

    Таймера и переменные связанные с ними

    Приветствую. На днях задался вопросом, а что же лучше...? Допустим, у нас есть игрок, которому через 10 секунд надо вывести сообщение, каким же из ниже перечисленных способом это лучше сделать? Вопрос о том, какой способ, собственно, будет более "шустрее".

    • 1) Gettime. Присваиваем:
      PHP код:
      testvar[playerid] = gettime()+10
    • И в секундный таймер (не отдельный, а так сказать "общий", где у нас уже есть какие-то проверки и тд):
      PHP код:
      if(testvar[playerid] == gettime()) SendClientMessage... 
    • 2) PVar. Присваиваем:
      PHP код:
      SetPVarInt(playerid,"Test",11); 
    • И в секундный таймер (не отдельный, а так сказать "общий", где у нас уже есть какие-то проверки и тд):
      PHP код:
      new GetPVarInt(playerid,"Test");
      if(
      == 1SendClientMessage...
      if(
      tSetPVarInt(playerid,"Test",t-1); 
    • 3) new testvar[MAX_PLAYERS]. Присваиваем:
      PHP код:
      testvar[playerid] = 11
    • И в секундный таймер (не отдельный, а так сказать "общий", где у нас уже есть какие-то проверки и тд):
      PHP код:
      if(testvar[playerid] == 1SendClientMessage...
      if(
      testvar[playerid]) testvar[playerid]--; 
    • 4) SetTimerEx. Создаём:
      PHP код:
      SetTimerEx("Test",10000,0,"d",playerid);
      И собственно сам таймер:
      public 
      Test(playerid) return SendClientMessage... 



    Так вот, какой из вариантов лучше? Кто-нибудь тесты уже проводил наверное. Ответ, желательно, аргументируйте, заранее благодарен.
    Последний раз редактировалось Kazoox; 17.02.2016 в 00:45.

  2. #2
    Аватар для _lizard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.02.2016
    Адрес
    Геленджик
    Сообщений
    193
    Репутация:
    26 ±
    Шустрее? Все варианты выведут сообщение через 10 секунд. Думаю 4 вариант будет быстрее, т.к. без лишних операций, но не тестил.
    И думаю, так будет лучше:
    PHP код:
    SetTimerEx("SendTimerMessage"10*1000false"ids"playeridcolormsg);
    forward SendTimerMessage(playeridcolormsg[]);
    public 
    SendTimerMessage(playeridcolormsg[]) return SendClientMessage(playeridcolormsg); 
    Последний раз редактировалось _lizard; 17.02.2016 в 01:25.

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

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от _lizard Посмотреть сообщение
    Шустрее? Все варианты выведут сообщение через 10 секунд. Думаю 4 вариант будет быстрее, т.к. без лишних операций, но не тестил.
    И думаю, так будет лучше:
    PHP код:
    SetTimerEx("SendTimerMessage"10*1000false"ids"playeridcolormsg);
    forward SendTimerMessage(playeridcolormsg[]);
    public 
    SendTimerMessage(playeridcolormsg[]) return SendClientMessage(playeridcolormsg); 
    Это не совсем тот ответ который мне нужен... жду еще помощи.

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

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

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

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Kazoox (17.02.2016)
  6. #5
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, ну в первых трёх случаях ты предлагаешь обращаться к массивам каждую секунду и делать проверки + в первом случае ещё и gettime каждую секунду вызываешь. В последнем же случае ты просто запускаешь 1 таймер, который выполнит нужный код. По-моему, тут и так понятно какой вариант оптимальнее
    Благодарю. Это да, но если, допустим, будет онлайн 500 игроков и будет целая куча таких таймеров же. Все равно данный вариант будет лучше? Да и еще вопрос. Лучше использовать 1 секундный таймер для каждого игрока или "разбить" его на несколько, это вообще даст какой-то результат? Допустим, один таймер у нас будет при срабатывании сначала проверять находится ли игрок в машине и выполнять уже дальше какие-то функции, второй будет проверять что игрок не находится в машине и выполнять опять же определённые функции и тд. Как лучше? Один для всего или разбивать, по сути можно такие же проверки сделать в одном таймере да и всё. Заранее опять же благодарен.

  7. #6
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Благодарю. Это да, но если, допустим, будет онлайн 500 игроков и будет целая куча таких таймеров же. Все равно данный вариант будет лучше? Да и еще вопрос. Лучше использовать 1 секундный таймер для каждого игрока или "разбить" его на несколько, это вообще даст какой-то результат? Допустим, один таймер у нас будет при срабатывании сначала проверять находится ли игрок в машине и выполнять уже дальше какие-то функции, второй будет проверять что игрок не находится в машине и выполнять опять же определённые функции и тд. Как лучше? Один для всего или разбивать, по сути можно такие же проверки сделать в одном таймере да и всё. Заранее опять же благодарен.
    Скидыщ. Таймеры выполняются по очерди,т.к один всего поток.(если не прав - поправьте).



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




  8. #7
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Повторюсь, если прям вместо каждого "счётчика" и тд запускать отдельный таймер, при большом онлайне, их (таймеров) будет просто уйма и не выйдет ли это боком? Конечно всё зависит от самого кода, но тем не менее

  9. #8
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Повторюсь, если прям вместо каждого "счётчика" и тд запускать отдельный таймер, при большом онлайне, их (таймеров) будет просто уйма и не выйдет ли это боком? Конечно всё зависит от самого кода, но тем не менее
    К каждой задаче нужно подходить с умом.Не нужно создавать громоздкие и не производительные системы,если знаешь,что можно сделать лучше.Я скажу,как сделал я у себя в моде: для каждого игрока собственный id таймера при подключении.В паблике,который вызывает таймер, находится достаточно много условий,но без них никуда.Так же есть еще таймер на секунду с использованием gettime() для серверных систем.В нем уже запускаю другие системы,которые должны повторяться с разным интервалом времени.Некий симбиоз. Тестировал с использованием плагина profiler,результат приемлемый.Но все же нужно держать в голове такой факт:"Сервер нагружают не таймеры,а код в них".Но нужно найти еще ту золотую середину между кол-ом таймеров и сложностью систем,находящихся в пабликах.

    И мне кажется,что вы не прошли по ссылке и не прочли ответ от Daniel_Cortez.



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




  10. #9
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    К каждой задаче нужно подходить с умом.Не нужно создавать громоздкие и не производительные системы,если знаешь,что можно сделать лучше.Я скажу,как сделал я у себя в моде: для каждого игрока собственный id таймера при подключении.В паблике,который вызывает таймер, находится достаточно много условий,но без них никуда.Так же есть еще таймер на секунду с использованием gettime() для серверных систем.В нем уже запускаю другие системы,которые должны повторяться с разным интервалом времени.Некий симбиоз. Тестировал с использованием плагина profiler,результат приемлемый.Но все же нужно держать в голове такой факт:"Сервер нагружают не таймеры,а код в них".Но нужно найти еще ту золотую середину между кол-ом таймеров и сложностью систем,находящихся в пабликах.

    И мне кажется,что вы не прошли по ссылке и не прочли ответ от Daniel_Cortez.
    Ошибаетесь, перешёл и прочитал и как раз вот эта фраза:"Но нет никакой гарантии, что таймеры распределятся достаточно ровно по времени, а не будут выполняться примерно в один момент. К тому же, добавится ещё немного нагрузки из-за планировщика таймеров.", - у меня и вызвала сомнения, из-за чего я решил не закрывать тему а выслушать мнение разных пользователей.
    P.S Как и в прошлом своём сообщении я согласен с тем фактом что то как написан код - очень важно. Я так же как и вы использую таймера и в них есть уйма всяких счётчиков и проверок, это обычное дело, да, но всё же решил узнать, быть может можно сделать как-то лучше, по-другому, просто хочется выслушать разные мнения по этому поводу, особенно тех людей которые в этом реально разбираются.

  11. #10
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Актуально

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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