Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-01-03 16:49:01 ЛС | профиль | цитата
Решил таки обновить GlobalVarEx ...
(GlobalVarEx)

Причины: некорректность использования метода doName. Данные для старого имени НЕ УБИВАЮТСЯ. В штатном GlobalVar, кстати говоря - тоже.
Для того, чтобы это делать корректно, нужен некий счетчик ссылок. А в Ex-е это уже как бы есть - убивать можно, если "список оповещения" становится пустым. Т.е. - малой кровью.
Таковую утечку памяти (как и ее отсутствие) можно посмотреть в такой схеме:
Add(CheckBox,13967371,91,105)
{
Left=21
Top=21
Caption="RUN"
link(onCheck,5922359:doEvent,[])
}
Add(Timer,10709575,210,98)
{
Enable=1
link(onTimer,14661053:doFor,[])
}
Add(IndexToChanel,5922359,147,105)
{
link(onEvent1,10709575:doStop,[])
link(onEvent2,10709575:doTimer,[(186,118)(186,104)])
}
Add(For,14661053,273,98)
{
End=10000
link(onEvent,1089149:doNext,[])
}
Add(CounterEx,1089149,336,98)
{
Max=1000000000
link(onNext,7518706:doName,[])
}
Add(GlobalVar,7518706,399,91)
{
Point(doName)
}

Предупреждение: использовать GlobalVar и GlobalVarEx с одним именем НИЗЯ. Присвоение в GlobalVar убивает "список оповещения" в GlobalVarEx. И теперь еще и наоборот, после уничтожения переменной с пустым "списком оповещения" в GlobalVarEx - GlobalVar с этим именем будет тупо падать (AV)

В общем, я предупредил
карма: 9

0
Редактировалось 6 раз(а), последний 2017-01-08 08:26:48