Вверх ↑
Ответов: 1841
Рейтинг: 369
#1: 2012-01-06 05:35:32 ЛС | профиль | цитата
Всем привет
Вот и мои 5 копеек
Всё же добил "кольцевание" и можно теперь при обнаружении замыкания на методе, вставлять альтернативный код а не лицезреть вылет среды.
Как это можно реализовать в С# я без понятия, но в purebasic вроде процедурами

Как работает:
Объявляем глобальную переменную (test) в hiSys.hws
Создаём массив в hiSys.hws с раннее объявленной переменной.
У элемента в каждом методе, необходимо прописать 2 переменные:
CP = 0
id = this.codename + '001' //001 порядковый номер функции.
Далее пытаемся найти в массиве наш уникальный id метода.
В случае если id найден, прерываем цикл, присваиваем переменной CP число 1 и потом пишем альтернативный код, который будет печататься в случае кольцевания на этом методе:

 for(i = 0; i < test.size(); i++)
if(test.get(i) == id)
i = test.size()
CP = 1
trace("Кольцевание") // альтернативный код
end
end

В случае если в массиве id не найден, отрабатываем 2 код:

 if (CP == 0)
test.add(id)
idx = test.size(id) - 1
trace("Нет кольцевания") //основной код
event('onMessage')
test.remove(idx)
end

В итоге, вот эта конструкция из CNET:

Add(EntryPoint,2953706,21,105)
{
link(onCreate,8005088:doWork2,[])
}
Add(Message,1517918,77,105)
{
link(onMessage,14233384:doRandom,[])
}
Add(Random,14233384,126,105)
{
link(onRandom,8005088:doWork1,[(170,111)(170,102)(67,102)])
}
Add(HubEx,8005088,63,105)
{
link(onEvent,1517918:doMessage,[])
}
будет отрабатывать также же как и в пакете windows...


Коды

hiSys.hws

//----------------------- SYSTEM ----------------------------------
func create(entry)
gvar(blk_vars, blk_procedure, blk_body, blk_event_gadget, blk, test)
test = new array()
...

hiMessage.hws

func doMessage(data)
CP = 0
id = this.codename + '001'

for(i = 0; i < test.size(); i++)
if(test.get(i) == id)
i = test.size()
CP = 1
trace("Кольцевание (doMessage)")
end
end

if (CP == 0)
test.add(id)
idx = test.size(id) - 1
trace("Нет кольцевания (doMessage)")
event('onMessage')
test.remove(idx)
end
end

func doMessage2(data)
CP = 0
id = this.codename + '002'

for(i = 0; i < test.size(); i++)
if(test.get(i) == id)
i = test.size()
CP = 1
trace("Кольцевание (doMessage2)")
end
end

if (CP == 0)
test.add(id)
idx = test.size(id) - 1
trace("Нет кольцевания (doMessage2)")
event('onMessage')
test.remove(idx)
end
end

Сейчас вот думаю, как это всё оптимизировать а также о возможных проблемах в будущем
карма: 1
0