Еще раз о чистке ресурсов
сижу вот тут кодю гаму и возникла такая трабла... (это типа как сказка начинается "жили были...")
немного о коде... есть у меня простой массив классов для хранения патронов... как только ктонить хочет стрельнуть, то массив прочесывается на наличие пустого класса и если найден пустой, то туда записывается инфа о пуле, там координаты, скорость, кто стрельнул, спрайт пули и т.п. дело в том, что процедура проверки существования пули была заключена в проверке наличия спрайта, т.е. если спрайт не null, то пуля существует... а когда пуля помирает то я прсто записывал в спрайт null и думал, что все просто супер... но не тут-то было... оказывается, что спрайт НЕ удаляется из переменной в момент занесения туда null, а удаляется он "попозже" (относительно попозже в зависимости от нагрузки проца, если проц свободен то сразу, а в условиях реалтайм приложения могет держаться до половины секунды) отдельным idle процессом отвечающим за чистку ресурсов (см. книгу по яве)... таким образом получается что в дальнейшем выполнении программы встречаются условия типа если спрайт не null, то нарисовать его на экране... и круто получается, что в момент проверки условия спрайт еще существует, а в момент вывода на экран (спустя 2-3 команды) его ужо нету... и вся система виснет и не говорит почему... возился я с этим гемороем часа 2... пока не перелопатил все 190 КБ кода... вот посчу тут, чтоб никто не повторил моей ошибки! :) |
Re: Еще раз о чистке ресурсов
можно конечно, вставлять gc() принудительно.
А можно пользоваться вектором. |
Часовой пояс GMT +4, время: 12:30. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot