Вверх ↑
Ответов: 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