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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Эмм, ну в первых трёх случаях ты предлагаешь обращаться к массивам каждую секунду и делать проверки + в первом случае ещё и gettime каждую секунду вызываешь. В последнем же случае ты просто запускаешь 1 таймер, который выполнит нужный код. По-моему, тут и так понятно какой вариант оптимальнее
    Связаться со мной можно в личных сообщениях этой группы

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



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


    Skype
    profan99
    VK
    click




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

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

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

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    197
    Репутация:
    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 12 ПоследняяПоследняя

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

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

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

Ваши права

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