[Plugin] Life Command Engine [LIFE:CMD]
#1

Life Commands v2.0:
Description:

This is a new shell that was created by me (Kazon).
It is written in C++ to Plugin

Installation:

Need to register #include
PHP код:
#include <LIFE-CMD> 
Examples of commands:

Commands in LIFE:CMD written as in ZCMD, YCMD and other.
PHP код:
LIFE:command(playeridparams[]) //(command) You command no slash (/)
{
    
// You code
    
return true;

PHP код:
CMD:mycommand(playeridparams[]) //(mycommand) You command no slash (/)
{
    return 
cmd::command(playeridparams); // So we call the command (/command) from the other command

CallBack's:

PHP код:
public OnPlayerCommandCall(playeridcmdtext[])
{
    
//playerid - ID Player | cmdtext - You Command
    
return true;

public OnPlayerCommandCall(playerid, cmdtext[]) - Called before using

PHP код:
public OnPlayerCommandFinish(playeridcmdtext[], success)
{
    
//playerid - ID Player | cmdtext - You Command | success - returns true or false, that is, whether there is a command or not
    
return true;

public OnPlayerCommandFinish(playerid, cmdtext[], success) - Called after using the command

Functions:

PHP код:
CMD:command(playeridparams[]) // Create command
LIFE:command(playeridparams[]) // Create command
FCMD:command(playeridparams[]) // Create command
FUSION:command(playeridparams[]) // Create command
COMMAND:command(playeridparams[]) // Create command
cmd::command(playeridparams); // Call command of the other command 
Speed Test:





The tests were conducted over:
RCMD - Romanius Command Engine
ZCMD - Zeex Command Engine
TCMD - Threaded Command Engine(Multithreading)
LIFE:CMD - Life Command Engine(Multithreading)



Dowload:

LIFE:CMD (dll + so + inc) - Dowload* (Updated 20/03/2013)
Speed Test - Dowload* (Updated 20/03/2013)
Source - Dowload* (Updated 20/03/2013)
Reply
#2

nice , this seem to be really fast ! gj
Reply
#3

Nice. Actually very nice.
Can you give some commands exampels ?
Reply
#4

Quote:

nice , this seem to be really fast ! gj

Thanks it really fast but could be errors as I new to C + + and this is my two job

And sorry for my bad english
Reply
#5

Quote:

Nice. Actually very nice.
Can you give some commands exampels ?

Commands in LIFE:CMD written as in ZCMD, YCMD and other.
Reply
#6

Hey, can you also do a speed test with YCMD?
Reply
#7

Quote:

Hey, can you also do a speed test with YCMD?

Yes, I will do later
Reply
#8

Did you make a non-threaded version of this plugin and check the difference between the two? I suspect that the performance benefic would rather come from the fact that this is a plugin (C++ code by itself executes faster than Pawn) than the fact that you are using threads (I believe it can be even slower than without threads because of synchronization overhead).

P.S. Why do people still bother writing command processors (there are literally tons of them)? I thought everyone uses dialogs nowadays
Reply
#9

Nice plugin
Quote:
Originally Posted by xeeZ
Посмотреть сообщение
Did you make a non-threaded version of this plugin and check the difference between the two? I suspect that the performance benefic would rather come from the fact that this is a plugin (C++ code by itself executes faster than Pawn) than the fact that you are using threads (I believe it can be even slower than without threads because of synchronization overhead).

P.S. Why do people still bother writing command processors (there are literally tons of them)? I thought everyone uses dialogs nowadays
Yeah there are a lot.. I tried once to make one with pawn.. crashed my compiler
Reply
#10

If the plugin will be developed further, I suggest to add isnull as native function called directly by plugin. For example (in plugin):
pawn Код:
PLUGIN_FUNCTION isnull(AMX* amx, cell* params)
{
    return (!(params[0]) || ((params[0] == '\1') && !(params[1])));
}
and
pawn Код:
native isnull(const params[]);
in include.
Reply
#11

Oh geez...
Reply
#12

I created a command - "/commands"
if I type "/commands" - the command runs succesfully
if I type "/COMMANDS" - the command results to unknown command
if I type "/CoMmAnDs" - the command results to unknown command

Help with this? Btw, nice plugin.
Reply
#13

Quote:
Originally Posted by greentarch
Посмотреть сообщение
I created a command - "/commands"
if I type "/commands" - the command runs succesfully
if I type "/COMMANDS" - the command results to unknown command
if I type "/CoMmAnDs" - the command results to unknown command

Help with this? Btw, nice plugin.
read what it says


Код:
LIFE:command(playerid, params[]) //(command) You command no slash (/) 
{ 
    // You code 
    return true; 
}
Reply
#14

Quote:
Originally Posted by Yves
Посмотреть сообщение
read what it says


Код:
LIFE:command(playerid, params[]) //(command) You command no slash (/) 
{ 
    // You code 
    return true; 
}
He meant it does not recognize case. aA bB cC

So, if I made LIFE:Yo

He is saying if he typed '/yo' IG, it would not receive it, unless he typed it case-sensitive.
Reply
#15

Quote:
Originally Posted by greentarch
Посмотреть сообщение
I created a command - "/commands"
if I type "/commands" - the command runs succesfully
if I type "/COMMANDS" - the command results to unknown command
if I type "/CoMmAnDs" - the command results to unknown command

Help with this? Btw, nice plugin.
I think that the script recognizes case sensitive, so if you create a cmd with the name, COMMAND is not the same as command.
Reply
#16

Wow. I will use it.
Reply
#17

Any tests vs Y_cmd?
Reply
#18

Quote:

Почему это "многопоточные"? Это не делает код быстрее! В частности, вы утверждать, что вы новичок в C + +, но решил использовать то, что по праву считается одним из самых сложных вещей в программировании, чтобы получить права (темы) без понимания на всех, почему она должна быть использована. xeeZ уже касались этого, и я полностью согласен. Это то, что вы делаете:
Получить команду в «ЦМД» функции.
Передать его в небезопасные очереди (то есть тот, который не может быть использован в многопоточном коде без риска сбоев).
Вернуться 1 - вы еще не знаете, если команда действительно существует, но возвращает 1 в любом случае ...
Подождите, пока второй поток, чтобы запланированных (неопределенное количество времени).
У некоторых тривиальных обработки строк, которые не должны быть на втором потоке, и, вероятно, занимает меньше времени, чем для запуска двух очередей операций, необходимых для перемещения данных между двумя потоками (не говоря уже издержек, связанных с потоками операционной системы).
Передайте данные в другое небезопасно очередь, удвоить ваши шансы аварии.
Подождите, пока первый поток, чтобы запланирован еще раз.
Читать и обрабатывать одной командой, независимо от размера очереди ожидания.
Наконец на самом деле команда.

Да, и кстати, ваши измерения производительности совершенно неправильно - вы только время первых двух пунктов выше, т.е. время вашего командного процессора требуется, чтобы поместить команду на первую очередь. Вам не проверить, как долго это берет, чтобы фактически выполнить команду, которой все другие процессоры команды 'таймингами делать. В самом деле, из-за того, как ваша система работает, это по определению медленнее, чем все остальные методы, потому что ваш будет по-прежнему внезапная команды с вашей второй стек долго после того, тайминги будут завершены все остальное. Таким образом, чтобы sumarise:


Очень опасный код ответственность перед сбой.
Новое в C + + можно решить сделать многопоточность.
Нет необходимости делать многопоточность (а на самом деле вредит вашей исполнение этого).
Полное отсутствие понимания того, что темы, хороши (и то, что они плохо).
Неправильное выполнение массово искажение кода.

Подводя итог резюме: "Темы" не магия "быстрее" переключателя - они жесткие. Я приду к более мелкие точки после того, как исправить эти. Edit: На самом деле, нет, давайте:






Ваша таймингов есть много "формат" звонки в них - вы оценивали, сколько времени выполнения тратится делать те по сравнению с тем, сколько на самом деле провели запуск команд? Это кажется важным фактом знать.
Вы испытываете 10 команд - это не много, даже самый маленький мод "стандартам.
Вы отключения предупреждений в коде C - всегда плохой знак.
Почему ваша основная структура под названием "Игрок" - что это нужно сделать с игроками? Конечно, "command_s" было бы лучше (более внимательно следим за более традиционные C + + именования, хотя это и не требуется, просто хорошая практика).
Исходя из этого - просто ужасно именования повсюду.
Кроме того, "Длина" вместо "Время".
Так много копий объекта! Вы понимаете, что указатели или каким памяти в C работает на всех?
"Новый символ []", а затем "Удалить" вместо "удалить []".
Почему "Список <AMX *>"? Там никогда не может быть больше 17 (16 filterscripts и режим игры).
Подождите, извините, посмотрев более внимательно на ваш код - ваше использование очередей является поточно, потому что вы блокируете на мьютексы везде! Дело в том, что очереди являются безопасными это хорошо, но ваши либеральные использования замок не является - особенно, когда вы заблокировать весь второй поток для всей его исполнение! Остановитесь в качестве замков для короткого времени, сколько возможно!
"WaitForSingleObject" это вызов ядра Windows (и я подозреваю, что у вас есть аналогичный вызов в коде Linux), что означает, что это SLOW - вероятно, более медленным, чем все остальное код вместе взятые!
"Я + +": использование "+ + я" с итераторы.
Я беру назад то, что я только что сказал о коде на самом деле быть потокобезопасными, потому что тогда я перечитываю "ProcessTick" и увидел, что, несмотря на ваши либеральные использования мьютексы и везде, их нет там.
Зачем использовать разные имена обратного вызова с любой другой командный процессор, который существует?
Почему это резьбовым? Я не могу переоценить этот вопрос!

Я, однако, поздравляю вас одно: вы не использовали ", используя STD;", но на самом деле указано, какие части вы хотели, чтобы "использовать"!

Do not forget that this is a beta version I will try to fix
And thanks for the help
Reply
#19

I have to test with multi-threading and found that without it faster
Reply
#20

Removed multithreading. Update link. Speed ​​increased.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)