DioD
offline
Опыт:
45,134Активность: |
Дело в том, что так делают все, кеш не высвобождается сам по себе воообще, я долго думал зачем высвобождать кеш а потом провёл тесты, у меня сохранялись все значения...
Таким хитрым образом можно делать лог карты в которые будет включена функция лога, таким образом модно запоминать все карты в которые играл человек... |
26.07.2006, 15:19 | #21
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Joes
Having 24/7 party.
offline
Опыт:
210Активность: |
Могу предположить следующее.
Вводная:
Refcount, он же счетчик ссылок, просто переменная, которая содержит количество ссылок на данный объект. Грубо говоря, когда 1 переменная ссылается на объект, то там будет 1. Как только в переменную записали null, она перестала ссылаться на объект, refcount стал 0, объект прибили.
Теперь, что такое SCV - использование ассоциативного массива для связывания данных с объектом через использование хака, который конвертирует хендл объекта в его числовое значение.
Это число хоть и хранит некое значение связанное с объектом, но никак не увеличивает refcount оного (так как вообще левый тип данных и с объектами вообще никак не связан). Объект убивают, но числовое значение (хендл, указатель, как кому удобнее) в кеше все еще висит. Вот и получается полная аналогия с висящими указателями. Кстати, тоже самое можно сделать и без кеша - просто переменной типа int присвойте H2I значение, объекту присвойте null, а потом попытайтесь из переменной получить объект и что то с ним сделать.
Как решать? Правильнее всего отлавливать убийство объектов и как то на это реагировать (подчищать кеш, как минимум). Второй вариант - всегда следить где идут убийства предметов (присвоение null) и делать подчистку кеша там же. |
26.07.2006, 17:43 | #22
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sergey
Старейший
offline
Опыт:
44,363Активность: |
Ну, не совсем так. Я имею ввиду ситуацию, когда человек играет, затем выходит из игры. При этом, как ни странно, иногда в памяти компьютера сохраняются данные кеша. При запуске новой игры всплывают значения из старой. Причем ничего не помогает - идут сплошные глюки. Пару раз я попадал на такой баг. Потом начал использовать такой код:
Create a game cache from SCV.w3v
Clear (Last created game cache) Create a game cache from SCV.w3v Set cache = (Last created game cache) Баг больше не возникал (т.к. даже если что-то оставалось от прошлой игры, кеш все равно обнулялся полностью).
На других картах я подобных конструкция не замечал. Возможно, что баг имел место только на моем компьютере. |
26.07.2006, 17:43 | #23
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Joes
Having 24/7 party.
offline
Опыт:
210Активность: |
Цитата:
Это ж только для single-player, я не ошибаюсь? |
|
26.07.2006, 17:44 | #24
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Кеш это ПУЛ, в нём данные остаются до выгрузки варкрафта, то что тут описал Sergey общеизвестный факт, но данные сохраняются независимо от того синг или мультиплэер, просто они не пишутся на диск, можно очень хитро поиграв в какуюнить карту запустить карту с эксплойтом в сингле и сохранить весь кеш на диск... ну не знаю зачем это надо, но так теоритически можно сделать, практически это никому не надо... |
26.07.2006, 17:54 | #25
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Joes
Having 24/7 party.
offline
Опыт:
210Активность: |
Я имел в виду именно сохранение данных на винт. |
26.07.2006, 19:00 | #26
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Ну сохранение данных на винт можно устроить только на своём компе |
26.07.2006, 19:38 | #27
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Sergey а я и не писал что кеш глючит ! я написал что это в принципе Глюк Вара ! и кстати если что то сделать с пустотой то ты поток убъешь ! и будет не хилая утечка ! смыл вот короче карта
мой ТРС там я дебуг сообщений написал смотрите и есть триггер аналог который работает отлично ! т.е. новая версия ТРС вот http://xgm.guru/forum/attachment.php?attachmentid=7603 Sergey и еще то ты реально не тот БАГ нашёл то что ты нашёл это не баг а просто ламерство юзера ! + конечно я про совсем про другое там от юзера зависит только как он обращаетьса с данными или хранит в числовом виде или в прямом ! кстати я подумал что может по ходу игры Вар вообще просто изменяет хендл объекта и вся система РБ накрываетьса и это ВПОЛНЕ РЕАЛЬНО ! Отредактировано DioD, 01.08.2006 в 21:16. |
27.07.2006, 14:53 | #28
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
B100D E1F
Scarecrow
offline
Опыт:
4,719Активность: |
Блиин вы меня напугали! Только-только 2 написанных на жассе моих нупских спелла, с которыми я провозился дофига времени, написанные на рб+кэш(СКВ) летят фтопку! Жалко блин так... |
28.07.2006, 20:44 | #29
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Если написаны правильно то не летят... |
28.07.2006, 21:07 | #30
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
DioD а я вообще юникальное решения для юнитов и шмота предумал ! =) вот еще бы к остальным типам и РБ не нужно !
|
04.08.2006, 14:47 | #31
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Toadcop, может быть в твоем случает все дело в таймере? В его удалении, тоже забавный глюк, может бы ты не видел: http://www.wc3jass.com/viewtopic.php?t=2091
Потом ошибка может возникать из-за этого участка кода: Код:
Смотри: http://www.wc3jass.com/viewtopic.php?t=2370. В boolexpr, тоже есть баг, а именно в резульате возврашаемом IsUnitType... Заменив код сбойного тригерра на такой: Код:
Я заставил его вполне сносно работать. Еднисвенные сообщения, которые вылетали, были о том что юнит имеет хиты... Закоментировал обнуления, заменил булекспр... Тут не глюк кэша, а глюк с обнулением переменных, ведь близзы сами никогда обнуление не юзали, вот и не протестили, возможны глюки... |
04.08.2006, 21:43 | #32
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
|
|
08.08.2006, 15:33 | #33
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
вот ссыль на оригинал и т.д. http://wc3campaigns.net/showthread.php?t=85984
Код:
вот посмотрите =) короче будет все ОК ! а потом удалите вот это код после call DestroyTrigger(GetTriggeringTrigger()) //Without this call, the bug won't happen. до конца функции. и увидите счастье про РБ =) то что локации будут иметь одинаковый хандле индекс но будут полностью рабочии ! вот РБ говно ! точнее Вар а может имено и РБ незнаю =) еще попробуйте разное количество call TriggerSleepAction(0.00) в перед созданием локацийй и т.д. =) желаю удачи... Отредактировано DioD, 10.08.2006 в 20:39. |
10.08.2006, 19:52 | #34
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Я там был, прочитал весь топик. Весьма интересно. Но на момент того как я читал не единого докозательства о глючности кэша не было найдено, а Векс, стамит там всех по полной =)) |
12.08.2006, 13:16 | #35
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Векс всё делает правильно... Надо на кампы и сич чаще ходить |
12.08.2006, 20:53 | #36
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
DioD, против Векса я ничего против не имею =)) Я имею ввиду он вас стамит... а порой просто не понимает ваш корявый английский...
|
15.08.2006, 15:14 | #37
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
|
|
28.08.2006, 17:18 | #38
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DotA_DR
offline
Опыт:
103Активность: |
Цитата:
интерестно, можно по подробнее? ведь если "хандлы" не зафиксированы, то значит они могут быть переиспользованы, в чём тут утечка? на сколько я знаю функции для удаления условий и действий нет DotA_DR добавил: на самом деле тут ничего страшного, просто надо следить за тем как ты используешь указатели и ещё становиться понятно почему близы не стали чистить локальные переменные. чтобы как раз избежать таких случаев. думаю можно придерживаться следующих правил и всё будет нормально: 1. В любом случае очищать локальные переменные типа handle 2. Если объект создаётся и удаляется в одной функции(потоке) (в том же вызове), и с ним работают в других потоках, то должен быть хотя бы 1 указатель на объект (обычно это выполняется указатель храниться в локальной переменной) 3. Если объект создаётся, но остаётся после завершения функции и планируется работа с ним, то необходимо сохранять этот указатель в некий глобальный пул (тут пока нет определённости: переменная, массив что-то ещё), потом при удалении объект удалять указатель из пула. |
|
30.08.2006, 14:04 | #39
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Действие и условие сохраняется форева и даже после удаления тригера будет существовать.
Через H2I и кеш его можно подключить к другому тригеру.
Кстати этот метод более гуманен, так как не требует постоянного создания и удаления объектов. |
30.08.2006, 14:30 | #40
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|