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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    Как сделать замер скорости команды?

    Здравствуйте. Хочу сделать замер скорости выполнения команды, но не знаю как.. Помогите пожалуйста..

    Команда:
    PHP код:
    CMD:megaphone(playeridparams[])
    {
        if(!
    IsPlayerConnected(playerid)) return true;
        switch(
    PlayerInfo[playerid][pMember])
        {
            case 
    0,4..9,11..18,20,22..24,26..27: return SendClientMessage(playerid0xCECECEFF"Вам недоступна данная команда");
        }
        if(
    sscanf(params"s[128]"params[0])) return SendClientMessage(playeridCOLOR_GRAD1"Введите: (/m)egaphone [текст]");
        switch(
    GetVehicleModel(GetPlayerVehicleID(playerid)))
        {
            case 
    425,427,433,470,490,497,500,523,528,548,563,596,597,598,599,601,560,411,522:
            {
                new 
    ttext[8];
                switch(
    PlayerInfo[playerid][pMember])
                {
                    case 
    1ttext "LSPD";
                    case 
    2ttext "FBI";
                    case 
    3ttext "SFA";
                    case 
    10ttext "SFPD";
                    case 
    19ttext "Зона 51";
                    case 
    21ttext "LVPD";
                    case 
    25ttext "SWAT";
                }
                new 
    string[128];
                
    format(stringsizeof(string), "[M] %s %s | %s: %s"GetPlayerRank(playerid), ttextGetName(playerid), params[0]);
                
    ProxDetector(80.0playeridstringCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOW);
            }
        }
        return 
    true;


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

    Статус
    Оффлайн
    Регистрация
    30.12.2015
    Сообщений
    24
    Репутация:
    2 ±
    Самый простой способ:

    PHP код:
    CMD:megaphone(playeridparams[]) 

        new 
    time GetTickCount();
        if(!
    IsPlayerConnected(playerid)) return true
        switch(
    PlayerInfo[playerid][pMember]) 
        { 
            case 
    0,4..9,11..18,20,22..24,26..27: return SendClientMessage(playerid0xCECECEFF"Вам недоступна данная команда"); 
        } 
        if(
    sscanf(params"s[128]"params[0])) return SendClientMessage(playeridCOLOR_GRAD1"Введите: (/m)egaphone [текст]"); 
        switch(
    GetVehicleModel(GetPlayerVehicleID(playerid))) 
        { 
            case 
    425,427,433,470,490,497,500,523,528,548,563,596,597,598,599,601,560,411,522
            { 
                new 
    ttext[8]; 
                switch(
    PlayerInfo[playerid][pMember]) 
                { 
                    case 
    1ttext "LSPD"
                    case 
    2ttext "FBI"
                    case 
    3ttext "SFA"
                    case 
    10ttext "SFPD"
                    case 
    19ttext "Зона 51"
                    case 
    21ttext "LVPD"
                    case 
    25ttext "SWAT"
                } 
                new 
    string[128]; 
                
    format(stringsizeof(string), "[M] %s %s | %s: %s"GetPlayerRank(playerid), ttextGetName(playerid), params[0]); 
                
    ProxDetector(80.0playeridstringCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOW); 
            } 
        } 
        
    printf("%i"GetTickCount() - time);
        return 
    true


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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от InCorrect Посмотреть сообщение
    Самый простой способ:

    PHP код:
    CMD:megaphone(playeridparams[]) 

        new 
    time GetTickCount();
        if(!
    IsPlayerConnected(playerid)) return true
        switch(
    PlayerInfo[playerid][pMember]) 
        { 
            case 
    0,4..9,11..18,20,22..24,26..27: return SendClientMessage(playerid0xCECECEFF"Вам недоступна данная команда"); 
        } 
        if(
    sscanf(params"s[128]"params[0])) return SendClientMessage(playeridCOLOR_GRAD1"Введите: (/m)egaphone [текст]"); 
        switch(
    GetVehicleModel(GetPlayerVehicleID(playerid))) 
        { 
            case 
    425,427,433,470,490,497,500,523,528,548,563,596,597,598,599,601,560,411,522
            { 
                new 
    ttext[8]; 
                switch(
    PlayerInfo[playerid][pMember]) 
                { 
                    case 
    1ttext "LSPD"
                    case 
    2ttext "FBI"
                    case 
    3ttext "SFA"
                    case 
    10ttext "SFPD"
                    case 
    19ttext "Зона 51"
                    case 
    21ttext "LVPD"
                    case 
    25ttext "SWAT"
                } 
                new 
    string[128]; 
                
    format(stringsizeof(string), "[M] %s %s | %s: %s"GetPlayerRank(playerid), ttextGetName(playerid), params[0]); 
                
    ProxDetector(80.0playeridstringCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOW); 
            } 
        } 
        
    printf("%i"GetTickCount() - time);
        return 
    true

    Я так уже пробывал сделать. Итог такой же как и в прошлый раз:
    PHP код:
    [13:36:190
    [13:36:240
    [13:36:47
    Уже не знаю как проверить..
    Пробывал даже через Float (0.10f), но было 0.0000000000...

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Я так уже пробывал сделать. Итог такой же как и в прошлый раз:
    PHP код:
    [13:36:190
    [13:36:240
    [13:36:47
    Ну так правильно, обычно для таких измерений команду запускают несколько раз. Но, ИМХО, самая большая нагрузка может возникать не столько от команды, сколько от over9000 вызовов strcmp в OnPlayerCommandText - но если использовать ZCMD/DC_CMD/y_commands, то вам это не грозит.


    Цитата Сообщение от StevenH Посмотреть сообщение
    Уже не знаю как проверить..
    Пробывал даже через Float (0.10f), но было 0.0000000000...
    GetTickCount возвращает целое число. Если код выполняется достаточно быстро, то до и после его выполнения функция вернёт одно и то же число, в результате получим разницу в 0 тиков. Преобразуйте его хоть в Float, хоть в строку, это всё равно будет 0.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. #5
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Ну так правильно, обычно для таких измерений команду запускают несколько раз. Но, ИМХО, самая большая нагрузка может возникать не столько от команды, сколько от over9000 вызовов strcmp в OnPlayerCommandText - но если использовать ZCMD/DC_CMD/y_commands, то вам это не грозит.



    GetTickCount возвращает целое число. Если код выполняется достаточно быстро, то до и после его выполнения функция вернёт одно и то же число, в результате получим разницу в 0 тиков. Преобразуйте его хоть в Float, хоть в строку, это всё равно будет 0.
    Спасибо, понял.
    И значит, я так понял, что никак нельзя измерить скорость данной команды?

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

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

    - - - Добавлено - - -

    Как-нибудь так:
    PHP код:
    CMD:test(playeridparams[])
    {
        new 
    time GetTickCount();
        for(new 
    i100000i++) cmd::megaphone(playerid"Test");
        return 
    printf("%i"GetTickCount() - time);


    И да, особо не вникал, но можно чуть оптимизировать
    PHP код:
    CMD:megaphone(playeridparams[])
    {
        switch(
    PlayerInfo[playerid][pMember])
        {
            case 
    0,4..9,11..18,20,22..24,26..27: return SendClientMessage(playerid0xCECECEFF"Вам недоступна данная команда");
        }
        if(!
    strlen(params)) return SendClientMessage(playeridCOLOR_GRAD1"Введите: (/m)egaphone [текст]");
        switch(
    GetVehicleModel(GetPlayerVehicleID(playerid)))
        {
            case 
    425,427,433,470,490,497,500,523,528,548,563,596,597,598,599,601,560,411,522:
            {
                new 
    ttext[8];
                switch(
    PlayerInfo[playerid][pMember])
                {
                    case 
    1ttext "LSPD";
                    case 
    2ttext "FBI";
                    case 
    3ttext "SFA";
                    case 
    10ttext "SFPD";
                    case 
    19ttext "Зона 51";
                    case 
    21ttext "LVPD";
                    case 
    25ttext "SWAT";
                }
                
    format(paramssizeof(params), "[M] %s %s | %s: %s"GetPlayerRank(playerid), ttextGetName(playerid), params);
                
    ProxDetector(80.0playeridparamsCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOW);
            }
        }
        return 
    true;

    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Помести её вызов в цикл на пару тысяч итераций и замеряй время до старта цикла и сравнивай его после окончания. Правда подобный замер не совсем точен, но погрешность большой не должна быть

    - - - Добавлено - - -

    Как-нибудь так:
    PHP код:
    CMD:test(playeridparams[])
    {
        new 
    time GetTickCount();
        for(new 
    i100000i++) cmd::megaphone(playerid"Test");
        return 
    printf("%i"GetTickCount() - time);


    И да, особо не вникал, но можно чуть оптимизировать
    PHP код:
    CMD:megaphone(playeridparams[])
    {
        switch(
    PlayerInfo[playerid][pMember])
        {
            case 
    0,4..9,11..18,20,22..24,26..27: return SendClientMessage(playerid0xCECECEFF"Вам недоступна данная команда");
        }
        if(!
    strlen(params)) return SendClientMessage(playeridCOLOR_GRAD1"Введите: (/m)egaphone [текст]");
        switch(
    GetVehicleModel(GetPlayerVehicleID(playerid)))
        {
            case 
    425,427,433,470,490,497,500,523,528,548,563,596,597,598,599,601,560,411,522:
            {
                new 
    ttext[8];
                switch(
    PlayerInfo[playerid][pMember])
                {
                    case 
    1ttext "LSPD";
                    case 
    2ttext "FBI";
                    case 
    3ttext "SFA";
                    case 
    10ttext "SFPD";
                    case 
    19ttext "Зона 51";
                    case 
    21ttext "LVPD";
                    case 
    25ttext "SWAT";
                }
                
    format(paramssizeof(params), "[M] %s %s | %s: %s"GetPlayerRank(playerid), ttextGetName(playerid), params);
                
    ProxDetector(80.0playeridparamsCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOWCOLOR_YELLOW);
            }
        }
        return 
    true;

    Спасибо.
    Если не сложно, то можно как то на примере данной команды, сделать оптимизацию? :)

  8. #8
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    154
    Репутация:
    17 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Спасибо.
    Если не сложно, то можно как то на примере данной команды, сделать оптимизацию? :)
    Например: названия фракций в массив поместить.
    Пример коллеги по цеху: перейти
    Мои глаза от твоего кода лезут на гавно-инфо и создают тему о расстановке пикапов.

  9. Пользователь сказал cпасибо:
    VVWVV (23.01.2016)
 

 

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

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

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

Ваши права

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