forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Программирование (http://forum.boolean.name/forumdisplay.php?f=54)
-   -   Еще раз о чистке ресурсов (http://forum.boolean.name/showthread.php?t=1602)

SubZer0 29.09.2006 18:48

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

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

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

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

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

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

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

:)

Piligrim 30.09.2006 11:10

Re: Еще раз о чистке ресурсов
 
можно конечно, вставлять gc() принудительно.
А можно пользоваться вектором.


Часовой пояс GMT +4, время: 12:30.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot