Здравствуйте, гость ( Вход | Регистрация )

> Помогите Оптимизировать Скрипт
EL-GReeN
сообщение 25.1.2012, 22:00
Сообщение #1


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Этот скрипт должен выполнятся постоянно с паузой между строк 0 или 1
но в людных местах он со временем виснет, не знаю особенностей пилота поэтому не могу определить узкое место.

Код
//Подобие инжектовского InJournal, в массиве %journal хранятся последние 100 сообщение
set %journal[100]
:re
set $tmp lastmsg
if ($tmp != %journal[1]) //если последнее сообщение не равно последнему в массиве значит это новое сообщение
for #a 1 99 1 //сдвиг всего массива на 1
set %journal[#a+1] %journal[#a]
end_for
set %journal[1] $tmp
end_if
goto re


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
EL-GReeN
сообщение 27.1.2012, 16:51
Сообщение #2


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Переписал скрипт, теперь все работает более менее стабильно, но весь смысл скрипта в том что бы исключить "проскок" нужного сообщения, не получилось все равно потери есть, наверно это должно быть в плагине или вшито в пилот.
скрипт

Код
set priority 0
set linedelay 0
set %j[20]
set #c2 1
:re
readmem #decCount 0xCE3228 d //чтение указателя на указатель 1
set $hexCount      //обнулить что бы не склеивались адреса
gosub DecToHex     //перевод в HEX
set $hexCount Insert(0x $hexCount 0) //+0x
readmem #decCount $hexCount d        //чтение указателя 2
set #c1 #decCount  //резервация для сравнения
set $hexCount      //обнулить что бы не склеивались адреса
gosub DecToHex     //перевод в HEX
set $hexCount Insert(0x $hexCount 0) //+0x
readmem $lmess $hexCount s 128       //чтение сообщения 3
if (#c2 != #c1) //если адреса не равны значит есть новое сообщение
   for #a 1 19 1 //сдвиг всего массива на 1
       set #b #a + 1
       set %j[#a] %j[#b]
       set logging %j[#a]
   end_for
   set %j[20] $lmess
   set logging %j[20]
end_if
set #c2 #c1
goto re
end_script  
//=============================================
:DecToHex
while #decCount > 16
    set #ostatock #decCount - ( #decCount / 16 * 16)
    set #decCount #decCount / 16
    gosub format
    //set logging  #decCount #ostatock || $hexCount
end_while
set #ostatock #decCount - ( #decCount / 16 * 16)
gosub format
return
:format  // Формирование внешнего вида числа.
    if #ostatock < 10
        set $hexCount #ostatock$hexCount
        return
    end_if
    if #ostatock = 10
        set $hexCount A$hexCount
        return
    end_if
    if #ostatock = 11
        set $hexCount B$hexCount
        return
    end_if
    if #ostatock = 12
        set $hexCount C$hexCount
        return
    end_if
    if #ostatock = 13
        set $hexCount D$hexCount
        return
    end_if
    if #ostatock = 14
        set $hexCount E$hexCount
        return
    end_if
    if #ostatock = 15
        set $hexCount F$hexCount
        return
    end_if
    msg Ошибка вычислений.
return


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.7.2025, 10:25
Designed by Nickostyle