Показать сообщение отдельно
Старый 29.09.2006, 18:48   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Радость Еще раз о чистке ресурсов

сижу вот тут кодю гаму и возникла такая трабла... (это типа как сказка начинается "жили были...")

немного о коде... есть у меня простой массив классов для хранения патронов... как только ктонить хочет стрельнуть, то массив прочесывается на наличие пустого класса и если найден пустой, то туда записывается инфа о пуле, там координаты, скорость, кто стрельнул, спрайт пули и т.п.

дело в том, что процедура проверки существования пули была заключена в проверке наличия спрайта, т.е. если спрайт не null, то пуля существует... а когда пуля помирает то я прсто записывал в спрайт null и думал, что все просто супер... но не тут-то было...

оказывается, что спрайт НЕ удаляется из переменной в момент занесения туда null, а удаляется он "попозже" (относительно попозже в зависимости от нагрузки проца, если проц свободен то сразу, а в условиях реалтайм приложения могет держаться до половины секунды) отдельным idle процессом отвечающим за чистку ресурсов (см. книгу по яве)...

таким образом получается что в дальнейшем выполнении программы встречаются условия типа если спрайт не null, то нарисовать его на экране... и круто получается, что в момент проверки условия спрайт еще существует, а в момент вывода на экран (спустя 2-3 команды) его ужо нету... и вся система виснет и не говорит почему...

возился я с этим гемороем часа 2... пока не перелопатил все 190 КБ кода...

вот посчу тут, чтоб никто не повторил моей ошибки!

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием